AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.11.2013, 08:31   #1  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Очередной импорт из Excel
Всем привет. Может уже было, решил поделиться, преобразование range из Excel в контейнер значений. Вставляем в класс ComExcelDocument_RU
X++:
public Container getRangeValue(MSOfficeBookMark_RU _bookMark,int _workSheet = 1)
{
    COM             comWorkSheet, comCells, comRange,
                    comRows,comCols, comItem;

    Container       con, conRow;
    int             startRow, endRow, startCol, 
                    endCol, rowCounter, colCounter;
    ;
    if (! m_comDocument)
        throw error(StrFmt("@DIS100401", this.getApplicationName()));

    comWorkSheet = this.getWorkSheet(_workSheet);

    comCells     = comWorkSheet.cells();
    comRange     = this.findRange(_bookMark, _workSheet);
    comRows      = comRange.Rows();
    startRow     = comRows.row();
    endRow       = startRow + comRows.count() - 1;

    comCols      = comRange.columns();
    startCol     = comCols.column();
    endCol       = startCol + comCols.count() - 1;

    for(rowCounter = startRow; rowCounter <= endRow; rowCounter++)
    {
        conRow = conNull();
        for(colCounter = startRow; colCounter <= endCol; colCounter++)
        {
            comItem = COM::createFromVariant(comCells.item(rowCounter, colCounter));
            conRow += ComExcelDocument_RU::variant2Str(comItem.value());
        }
        con = conpoke(con, conlen(con) + 1, conRow);
    }
    return con;
}
Тестил на 2007 Excel и 2009 Ax
За это сообщение автора поблагодарили: S.Kuskov (3), NickMDAX (1).
Старый 27.11.2013, 08:52   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Спасибо за пример А... чем это принципиально отличается от случая, когда вложенные циклы находятся в коде импорта? Ведь в импорте все равно понадобится цикл для разбора контейнера.
Старый 27.11.2013, 09:03   #3  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Не знаю верно ли я понял. Но по моему суть в том что бы один раз обратиться к Excel, путем считывания объекта cells. + скрыта вся реализация в классе. А принципиально различий нет, я думаю. Скорость импорта средняя, но быстрее чем каждый раз к клеткам обращаться.

Еще пробовал через comVariant = range.value2(), но тут аксапта не работает с многомерными массивами.

Куда проще перебирать контейнер, чем возиться с этими комами каждый раз. Ну и нужно понимать, что это не для загрузки больших данных.
Ну еще есть маленький +, хавает объединенные ячейки.

Последний раз редактировалось Kainix; 27.11.2013 в 09:05.
Старый 27.11.2013, 10:35   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Kainix Посмотреть сообщение
Но по моему суть в том что бы один раз обратиться к Excel, путем считывания объекта cells. + скрыта вся реализация в классе.
Нет. В Вашем примере все то же поячеечное чтение - comCells.item(). По одной ячейке за раз. Выигрыша в производительности не будет. У Вас просто чуть другой способ идентификации ячеек и возврат полученных результатов.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012: импорт из Excel wojzeh DAX: Администрирование 6 10.09.2013 17:09
Импорт договоров покупки AX2012 через Excel Add-in Daar DAX: Функционал 1 25.06.2013 19:27
Построчный импорт из Excel через COM _and DAX: Программирование 3 05.07.2011 14:05
Импорт даты через Excel OliaM DAX: Функционал 2 13.12.2007 10:32
Импорт из Excel через шаблон стандартными средствами аксапты NV DAX: Функционал 5 20.01.2005 12:26

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:45.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.