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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2016, 14:15   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
XMLExcelDocument_RU вставка значения построчно. Ax2012
Добрый день всем.
Реализую выгрузку в Excel на большой объём данных(более 50 тыщ строк)
Использую класс XMLExcelDocument_RU. Выгрузка через него происходит молнейностно в сравнении с ComExcelDocument_RU. Но на больших данных скорость падает экспоненциально(до часа и более). Решил оптимизировать выгрузку заполняя отчёт не по ячейкам а по строчно. И никак у меня это не получается. Пробовал передавать и строку разделённую табуляцие, и передавал массив...так же указывал и правильный Range. Но всё равно в Excel-е пишет всё в одну колонку.
Кто нить сталкивался с данной проблемой, и как её решил?
Спасибо.

X++:
    XMLExcelDocument_RU                         excellDocument;
    OXMLWorksheet_RU                            worksheet;
    OXMLWorkbook_RU                             workbook;
    Bookmark                                    bookmark;
    int                                         rowNum,colNum,lineNo,countCol;
    Filename                                    newFileName;
    Filename                                    newPathFileName;
    Array                           arr = new Array(Types::String);
    str                             strVal;
    
    rowNum = 10;
    newFileName = WinAPI::getTempPath() + #reportSubFolder + "TestXLS.xlsx";
    
    excellDocument = XMLExcelDocument_RU::newFromFile(TemplateProvider_RU::getFor(_args).get(resourceStr(Resourse)), newFileName);

    strVal = num2char(9)+"qqq";
    strVal = strVal + num2char(9)+"333";
    strVal = strVal + num2char(9)+"rrrrrrrrr";
    strVal = strVal + num2char(9)+"23323";
    
    arr.value(colNum,"1111");
    colNum++;
    arr.value(colNum,"aaaaaa");
    colNum++;
    arr.value(colNum,"2222");
    colNum++;
    arr.value(colNum,"asdsasda");
    colNum++;
    
    
    workbook = excellDocument.workbook();
    worksheet = workbook.getWorksheet();
    
    bookmark = '';
    bookmark = ComExcelDocument_RU::numToNameCell(1,rowNum) +':'+ComExcelDocument_RU::numToNameCell(4,rowNum);
    bookmark = ComExcelDocument_RU::replaceWorksheetName(bookmark,worksheet.Name());
    worksheet.
    excellDocument.insertValue(bookmark, arr);
Старый 04.04.2016, 14:29   #2  
NeveB is offline
NeveB
Участник
 
60 / 16 (1) ++
Регистрация: 14.11.2003
Адрес: Mosсow
Это известная проблема Open XML - колоссальный упадок производительности с увеличением объема данных. Построчная запись тут не поможет. Выход - использовать .Net Streams для вывода данных порционно.
Я бы посоветовал воспользоваться Ado.Net - хорошо работает с большими объемами как на клиенте так и на сервер, как на чтение так и на вставку записей.
Старый 04.04.2016, 14:33   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от raniel Посмотреть сообщение
Реализую выгрузку в Excel на большой объём данных(более 50 тыщ строк) Использую класс XMLExcelDocument_RU. Но на больших данных скорость падает экспоненциально(до часа и более).
Коллеги замечали, что штатный OpenXML SDK начинает ощутимо тормозить при размере выходного файла порядка 450kb и более, и это не лечится. Точнее, лечится использованием другого движка генерации файлов Excel. Заметьте, что в AX7 не используют "свой же" OpenXML SDK - там решили использовать стороннюю библиотеку EPPlus, что тоже как бы намекает...
За это сообщение автора поблагодарили: trud (1), MikeR (6), raniel (1), Dreadlock (3).
Старый 04.04.2016, 15:24   #4  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Спасибо. Ну а если вставить заранее сформированный массив? Тут вопрос чтоб он разбился по ячейкам.
Старый 21.07.2016, 13:18   #5  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Заметьте, что в AX7 не используют "свой же" OpenXML SDK - там решили использовать стороннюю библиотеку EPPlus, что тоже как бы намекает...
Скажите, а пробовал кто-то и есть вообще такая возможность прикрутить эту библиотеку EPPlus к Ax2009?
Старый 04.04.2018, 18:07   #6  
AnGor is offline
AnGor
Участник
Аватар для AnGor
 
97 / 46 (2) +++
Регистрация: 30.08.2007
Адрес: Ulm
Записей в блоге: 6
Цитата:
Сообщение от Craz Посмотреть сообщение
Скажите, а пробовал кто-то и есть вообще такая возможность прикрутить эту библиотеку EPPlus к Ax2009?
I've made an example in AX 2012 R3. I think it's possible in 2099 too:
http://axforum.info/forums/blog.php?b=8261
Старый 05.04.2018, 10:36   #7  
NickMDAX is offline
NickMDAX
Участник
 
16 / 11 (1) +
Регистрация: 12.09.2011
Адрес: Moscow
Цитата:
Сообщение от AnGor Посмотреть сообщение
I've made an example in AX 2012 R3. I think it's possible in 2099 too:
http://axforum.info/forums/blog.php?b=8261
Да, все именно так, как описал gl00mie, на 2009 все работает. EPPlus.dll должна лежать в папке клиента и сервера. Ну и в AX импортировать в узел References репозитария.
Вложения
Тип файла: zip EPPlus 4.0.4.zip (599.3 Кб, 107 просмотров)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
модификация taxTrans_RU в пакетном режиме в классе GoodsInRouteUpdate_RU Владимир Максимов DAX: Программирование 0 13.08.2015 18:13
Макросы StartSafeCall_RU at5454 DAX: Программирование 3 24.04.2015 16:55
XMLExcelDocument_RU объединение ячеек и вставка картинки raniel DAX: Программирование 13 26.01.2015 14:45
Ax3 - Модуль Учет затрат egorych DAX: Функционал 15 12.12.2013 17:58
axforum blogs: Формат адресов. AddressMap_RU Blog bot DAX Blogs 0 08.02.2011 12:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:15.