15.03.2023, 14:09 | #1 |
Участник
|
Отчет Excel, созданный через OpenXML, открывеается в Экселе несколько часов
Отчет Excel, созданный через OpenXML, открывается в Экселе несколько часов
Привет! AX 2012 R3. Через класс - наследник от XmlExcelReport_RU сохраняется файл в формате xlsx. В этом файле 180 тыс. строк. Размер файла 27 мегабайт. Если открыть этот файл в Экселе, то Эксель его открывает 3-4 часа. Если потом пересохранить файл из Экселя, то после пересохранения файл открывается за 30 секунд. Формул в файле нет. Просто таблица из 40 полей. И шапка из 10 полей. Вопрос: можно ли задать какой-то параметр, чтобы отчет сохранялся без сжатия, или еще чего-то такого, что мешает его быстрому открытию без пересохранения через Эксель. И второй вопрос: кто-то мне когда-то давал код, который умеет создавать экселевский файл без использования OpenXML, путем прямой записи в ZIP-файл и переименование расширения этого файла с ZIP на XLSX. К сожалению, я забыл кто мне давал, и куда я подевал тот пример. Может ли кто-то выложить пример, который создает экселевский файл без использования OpenXML и тем более без использования Excel ?
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
15.03.2023, 14:24 | #2 |
Участник
|
Цитата:
Если открыть этот файл в Экселе, то Эксель его открывает 3-4 часа. Если потом пересохранить файл из Экселя, то после пересохранения файл открывается за 30 секунд.
Цитата:
Может ли кто-то выложить пример, который создает экселевский файл без использования OpenXML и тем более без использования Excel ?
но зачем? если есть OpenXML и другие библиотеки |
|
15.03.2023, 14:37 | #3 |
Участник
|
Через блокнот я пробовал - работает. Через Аксапту пробовал - не работает. У меня недостаточно таланта, поэтому прошу пример. Я знаю, что он есть
Несколько дней читал много теории на этот счет и видел много примеров на разных языках програмирования.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
15.03.2023, 14:44 | #4 |
Участник
|
Так в чем разница между файлами до и после?
|
|
15.03.2023, 14:56 | #5 |
Участник
|
Цитата:
В медленном файле каждая ячейка Экселя описывается так: <x:c xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" r="Y186546" s="16" t="s"><x:v>7282</x:v></x:c> В быстром файле каждая ячейка Экселя описывается так: <c r="N195411" s="1" t="s"><v>574895</v></c> Т.е. в медленном файле в каждой ячейке хранится информация о схеме. А в быстром файле этой информации нет.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
15.03.2023, 15:06 | #6 |
Участник
|
Попробовал другой отчет OpenXML вывести, в другой AX 2012. Там без информации о схеме ячейки выгружаются. Может как-то форматирование ячеек надо убрать в шаблоне. Буду сравнивать шаблоны.
Шаблоны простейшие - одна строка в шаблоне BODY
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
19.03.2023, 18:49 | #7 |
Участник
|
Нашел способ сохранять лист Эксель через OpenXML таким образом, чтобы удалить из каждой ячейки информацию о схеме. Форматирование ячеек при этом пропало, но для этого отчета не повлияло на его внешний вид, только границы ячеек не прорисовались для динамически добавленных строк.
1) В метод XMLExcelDocument_RU::newFromFile() в третий параметр _templateMode вместо значения true передавать значение false. X++: document = XMLExcelDocument_RU::newFromFile(TemplateProvider_RU::getFor(this).get(this.templateName()),
newFileName,
false); X++: //document.insertRowsByBookmark(_bookmark, (getHeight ? height : 0)); X++: int numOfRows; X++: //Заменить строку //row = conPeek(rangeInfo, #posFromRow); //На строку row = conPeek(rangeInfo, #posFromRow) + numOfRows; X++: numOfRows ++; Позже сообщу, насколько удалось ускорить открытие получившегося файла в Экселе.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 19.03.2023 в 18:56. |
|
|
За это сообщение автора поблагодарили: sukhanchik (10). |
20.03.2023, 09:21 | #8 |
Участник
|
А в шаблоне-то изначальном схема в ячейках указана была? или она откуда-то нарисовалась при создании отчета в Ax?
|
|
20.03.2023, 11:52 | #9 |
Участник
|
Цитата:
Вообще, если сохранить файл в Экселе, то схема из ячеек пропадает. Т.е. это чисто фишка движка OpenXML. Именно когда через OpenXML файл сохраняешь, то генерится схема в каждой ячейке.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
20.03.2023, 11:59 | #10 |
Участник
|
В общем проблема решилась тем, что в метод rowIndex() класса OXMLRow_RU я вставил код, который удаляет ссылку на схему. Одна строка кода решила все проблемы.
Теперь файл открывается за 15-30 секунд. И сохраняется форматирование ячеек из шаблона. Все предыдущие мои манипуляции приводили к тому, что время вывод в Эксель линейно увеличивалось с ростом количества строк. И к 500-й строке доходило до одной строки в секунду. Так что не читайте всё, что я до этого пытался сделать
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 20.03.2023 в 12:01. |
|
|
За это сообщение автора поблагодарили: ice (1), LETTO (2), Pandasama (3), gl00mie (5), Logger (3), BOAL (3). |