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