![]() |
#41 |
Участник
|
Да, все работает без Экселя, в пакете через OXML. Наконец-то можно избавиться от всяких буферов обмена и ADO Recordset для цивилизованного и самое главное быстрого вывода данных в Эксель без всяких хакерских уловок.
Просто организм уже настолько привык к хакерским способам вывода в Эксель, что уже пропускаешь мимо ушей цивилизованные способы.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
![]() |
#42 |
Участник
|
Сколько памяти при этом отъедает АОС аксапты в течении этих 10 минут ?
У меня была подобная задача. Выгрузить пару-тройку сотен тысяч строк из БД в файл excel в указанную пользователем сетевую папку. С отягчающими обстоятельствами - пользователи могли в пакетный режим отправить сразу несколько подобных отчётов. При использовании вывода данных через DocumentFormat.OpenXML оперативная память на сервере быстро заканчивалась. Красивая шапка в отчёте была не нужна, поэтому я использовал промежуточный файл CSV. Файл в памяти не держится, заполняется через System.IO.File::AppendAllText. Накапливается несколько мегабайт данных, записывается в файл и так в цикле. Потом файл открывается с помощью Microsoft.Office.Interop.Excel, устанавливаются форматы данных в столбцах и происходит сохранение в xlsx. Память сильно расходуется только в этот момент.
__________________
Дмитрий |
|
![]() |
#43 |
Участник
|
Структура файла простая. Не проще ли сгенерить xml файл записью в текстовый файл, запаковать в архив ииназвать xlsx. Быстро и памяти не тратится.
|
|
![]() |
#44 |
Участник
|
Цитата:
Если да, то excel не откроет такой файл. А если имеются в виду все каталоги и файлы внутри архива xlsx, то csv проще. Не нужно морочиться с вставкой строк, дат и прочих хитрых значений. И непонятно сколько памяти потратит архиватор на формирование файла-архива.
__________________
Дмитрий Последний раз редактировалось Damn; 18.12.2020 в 10:44. |
|
![]() |
#45 |
Участник
|
Цитата:
$excel = New-Object -ComObject Excel.Application $excel.Workbooks.Open("c:\temp\www2.csv").SaveAs("c:\temp\FileName.xlsx",51) $excel.Quit() |
|
|
За это сообщение автора поблагодарили: BOAL (3). |
![]() |
#46 |
Участник
|
Так у автора и вопрос как это сделать на пакетном сервере, если Excel там устанавливаться не будет.
А без Excel New-Object -ComObject Excel.Application увы, не катит. Если бы он был, то и из Аксы это сделать можно было. |
|
![]() |
#47 |
Участник
|
Пока все работает стабильно. На выходе получаются файлы Эксель размером 60 мегабайт. Параллельно работают другие пакетники.
В общем класс XMLExcelReport_RU, OpenXML, CIL и .NET рулят. Пока что. Эксель не нужен для этого. А если CIL отключить, то все работает в сотни раз медленнее - в файл начинаются выводиться по 2-3 строчки в секунду. А с включенным CIL - 500 тыс. строк за 10 минут.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 18.12.2020 в 16:15. |
|
![]() |
#48 |
Участник
|
Ээмм, прости за наивность. А на пакетном сервере в акс2012 с выполнение пакета на Сервер разве можно управлять отключением CIL? Я всегда был уверен - что попало в пакетный сервер аск2012 - попало в CIL
|
|
![]() |
#49 |
Участник
|
Полагаю, что пакеты запустили в старом режиме как в акс4. Запускается из под ax32.exe но если пакетный класс помечен как server или called from то он работает при этом на сервере и в режиме p-code.
А без ax32.exe это невозможно. |
|
![]() |
#50 |
Участник
|
А что все отладку и тестирование сразу делают в пакетном режиме?
Думаю, что Ace of Database все таки проверил в интерактивном режиме без CIL, потом в CIL, а уж потом начал запускать в пакете. |
|
![]() |
#51 |
Участник
|
Когда я говорил, что отчет работает медленно не в CIL, то имел в виду его запуск не в пакете и с отключенным CIL. Когда я говорил, что отчет работает быстро в CIL, то имел в виду, что он работает быстро как в пакетном режиме, так и не в пакете, но со включенным CIL.
Все, больше никаких комбинаций я не имел в ввиду. Надо специально оформить код так, чтобы он выполнялся в CIL даже если запускаешь отчет не в пакете. И собрать CIL. И включить в настройках пользователя CIL. И тогда отчет работает быстро (в сотни раз быстрее чем без CIL). Класс, который работает - серверный. И в пакете он серверный и не в пакете. Когда я говорю про разницу между CIL и не-CIL, я имею в виду галочку в настройках пользователя. В пакете работает или не в пакете - на быстродействие сильно не влияет. Главное - чтобы работало в CIL.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
![]() |
#52 |
Сенбернар
|
Про EPPlus.dll
Цитата:
И что с ней делать дальше, подскажите? DAX2009, EEPlus.dll v. 4.1.1.0
__________________
Best Regards, Roman |
|
![]() |
#53 |
Участник
|
Если не ошибаюсь, надо найти библиотеку на версии .Net 3.5
|
|
![]() |
#54 |
Сенбернар
|
Про EPPlus.dll
Это понятно, но это - программа-минимум. Чего хотят:
1. DLL должна работать из пакетных заданий, то есть, насколько я понимаю, должна быть зарегистрирована на сервере (?), то есть должна быть x64 (?). 2. DLL должна быть бесплатной, то есть версия ее должна быть меньше 5.0 (начиная с 5.0 она платная. И для скачивания на официальном сайте, доступна, ессно, только эта версия). Вооот...
__________________
Best Regards, Roman |
|
![]() |
#55 |
Участник
|
Тут её нет?
|
|
|
За это сообщение автора поблагодарили: RVS (3). |
![]() |
#56 |
Сенбернар
|
Цитата:
Сообщение от Dreadlock
![]() Тут её нет?
__________________
Best Regards, Roman |
|
|
|