04.04.2016, 14:15 | #1 |
Участник
|
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 |
Участник
|
Это известная проблема Open XML - колоссальный упадок производительности с увеличением объема данных. Построчная запись тут не поможет. Выход - использовать .Net Streams для вывода данных порционно.
Я бы посоветовал воспользоваться Ado.Net - хорошо работает с большими объемами как на клиенте так и на сервер, как на чтение так и на вставку записей. |
|
04.04.2016, 14:33 | #3 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: trud (1), MikeR (6), raniel (1), Dreadlock (3). |
04.04.2016, 15:24 | #4 |
Участник
|
Спасибо. Ну а если вставить заранее сформированный массив? Тут вопрос чтоб он разбился по ячейкам.
|
|
21.07.2016, 13:18 | #5 |
Участник
|
Цитата:
Сообщение от gl00mie
Заметьте, что в AX7 не используют "свой же" OpenXML SDK - там решили использовать стороннюю библиотеку EPPlus, что тоже как бы намекает...
|
|
04.04.2018, 18:07 | #6 |
Участник
|
Цитата:
http://axforum.info/forums/blog.php?b=8261 |
|
05.04.2018, 10:36 | #7 |
Участник
|
Цитата:
Сообщение от 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 |
|