Зарегистрироваться | Поиск |
Результаты опроса: Оцените полезность этого класса ? | |||
Очень полезно | 2 | 9.09% | |
Пригодилось | 5 | 22.73% | |
На досуге посмотрю | 13 | 59.09% | |
Совершенно ненужная вешь | 2 | 9.09% | |
Голосовавшие: 22. Вы ещё не голосовали в этом опросе |
|
Опции темы |
24.11.2004, 09:33 | #1 |
Участник
|
Ускорение экспорта в Excel
Привет.
Я тут новенький, но вижу тут много раз всплывает тема экспорта в Excel. Мы тоже столкнулись с проблемой медленной выгрузки в Excel, для ее решения был написан класс ExportExcelViaCsv наследник ComExcelDocument_RU , который экспортирует данные через временный файл c:\data.csv. Который в свою очередь импортируется в Excel через макрос import_csv.bas. За счет этого скорость вывода стала значительно выросла, для примера раньше печать отчета по остаткам товара 40000 строк занимала 3 часа 10 минут, теперь 9 минут ... В нем конечно реализованны не все функции, в связи с вечной нехваткой времени пока только: deleteRow dks_copyBookmark insertValue я думаю не составит проблем дописать остальные методы... Использование: 1 Заменяете new ComExcelDocument_RU() на new ExportExcelViaCsv() 2 В файл шаблона вставляете макрос import_csv.bas... Запускаете радуетесь жизни :-) |
|
24.11.2004, 10:15 | #2 |
Участник
|
Кому импортить проект неохота вот основные части простым текстом:
Таким образом формируется файл из Axapta 3.0 PHP код:
PHP код:
|
|
24.11.2004, 10:36 | #3 |
1C
|
Смысл экселевского макроса понять не могу. Exel сам способен работать с форматом .csv при простом открытии если грамотно расположить разделители естественно.
А проблема медленного экспорта действительно существует. Мы, например, выводим в Exel через ActiveX. Скорость вырастает в разы. |
|
24.11.2004, 10:44 | #4 |
Участник
|
Цитата:
Изначально опубликовано YVAS
Смысл экселевского макроса понять не могу. Exel сам способен работать с форматом .csv при простом открытии если грамотно расположить разделители естественно. Делал и через простой импорт данных CSV с разделителями, но есть минусы 1. Необходима большая функциональность чем просто вставить данные, необходимо еще копировать оформление, удалять строки и столбцы включать ограничители страниц и.т.д. (многое конечно в будщем когда время появится 2. ограничение Excel не умеет вставлять больше 65536 строк на одну страницу, с помощью макроса такое ограничение можно обойти. |
|
24.11.2004, 12:42 | #5 |
Administrator
|
Ну кстати, вполне может быть что данный макрос заменит ActiveX-ную компоненту.
Скорость не проверял - однако - если по скорости способ YVAS не лучше скорости Tron, то на мой взгляд очень даже вполне. В качестве минусов метода Tron можно сказать, что: 1. в каждый шаблон нужно вставлять макрос, и в каждом клиентском Excel е, (если работа с Аксаптой конечно ведется не по терминалке) надо разрешать исполнение макроса без подтверждения пользователя (ставить низкий уровень безопасности). 2. Действительно, надо писать все команды-сообщения для форматирования в Excel-е. В ActiveX-компоненте сие делается напрямую - и там проблем нет. Другое дело, что возникает вопрос, а много ли отчетов (из внутренних) у которых будет много шаблонов? В отношении ограничения кол-ва строк есть вполне резонный (и немного философский) вопрос - о том - кто будет читать такой отчет. Когда кто-то хочет получить такой отчет - он хочет получить фактически некие данные для последующей, вторичной выборки и группировки - как ему удобно (100% вер-ть, что не будет отчет с 65535 строками печататься весь). А значит (как вариант) можно задать все варианты группировки и фильтрации в Аксапте путем программирования. Однако сказанное выше есть сугубо мое личное мнение - я вполне могу ошибаться. |
|
24.11.2004, 13:28 | #6 |
Участник
|
Вообще с импортом и экспортом в экселе можно работать через ODBC драйвера, получается очень быстро, а так же без промежуточных файлов..
что то типа этого, и скорость вам очень понравится /* exec sp_addlinkedserver @server = 'X2SQL', @srvproduct = 'Jet 4.0 file', @provider = 'Microsoft.Jet.OLEDB.4.0', @datasrc = 'I:\Inetpub\trade\v2.4\aaa.xls', @location = NULL, @provstr = 'Excel 8.0, HDR=No' go select * from openquery(X2SQL,'select * from [qqq$]') go exec sp_dropserver 'X2SQL' */ |
|
24.11.2004, 13:52 | #7 |
Участник
|
Цитата:
Изначально опубликовано sukhanchik
1. в каждый шаблон нужно вставлять макрос, и в каждом клиентском Excel е, (если работа с Аксаптой конечно ведется не по терминалке) надо разрешать исполнение макроса без подтверждения пользователя (ставить низкий уровень безопасности). открытые через com- объект с любым уровнем безопастности без всяких вопросов. Так что уровень менять ненадо... Про каждый шаблон это да, но это только один раз, больше ничего менять не надо... Цитата:
Изначально опубликовано sukhanchik
В отношении ограничения кол-ва строк есть вполне резонный (и немного философский) вопрос - о том - кто будет читать такой отчет. Когда кто-то хочет получить такой отчет - он хочет получить фактически некие данные для последующей, вторичной выборки и группировки - как ему удобно (100% вер-ть, что не будет отчет с 65535 строками печататься весь). А значит (как вариант) можно задать все варианты группировки и фильтрации в Аксапте путем программирования. |
|
24.11.2004, 14:35 | #8 |
Administrator
|
Цитата:
Про уровень безопастности, как не странно Excel проглатывает шаблоны с макросами
открытые через com- объект с любым уровнем безопастности без всяких вопросов. Даже не думал... |
|
24.11.2004, 16:37 | #9 |
SAP
|
Цитата:
Изначально опубликовано ddadream
Вообще с импортом и экспортом в экселе можно работать через ODBC драйвера, получается очень быстро, а так же без промежуточных файлов.. |
|
24.11.2004, 17:19 | #10 |
NavAx
|
Ну, раз поднялась эта тема, то и я словечко вверну
Конструкция: TextBuffer.toClipboard(); worksheet.pastespecial(1); работает великолепно и быстро. Но вот при работе в терминале у меня возникли проблемы. Если запустить пакетного обработчика и закрыть окно терминала, то она выдаст ошибку. А если оставть окно терминала, то она хватает мой локальный буффер. Может кто посоветует, как это исправить?
__________________
Isn't it nice when things just work? |
|
29.11.2004, 11:12 | #11 |
Участник
|
tron
Я конечно, извиняюсь, но Вы сравнивали производительность, достоинства и недостатки, Вашего метода и вот этого http://forum.mazzy.ru/index.php?showtopic=385&hl=excel Смысл в том, что данные вставляются из буфера обмена напрямую в EXCEL минуя промежуточный текстовый файл. Как следствие, нет необходимости в макросе Excel. Подробное обсуждение этого метода было здесь http://www.axforum.info/forums/showt...4163#post24163 |
|
25.01.2005, 17:34 | #12 |
Участник
|
Может кто-то поможет???
написал макрос который сохраняет выделенную область в формате CSV, как известно значения ячеек разделяются символом ";" а если в ячейке есть точка с запятой то значение должно браться в кавычки. Так вот если в ячейке стоит точка с запятой и сохранять файл макросом, то кавычки не ставятся при наличии в ячейке ; , а если сохранять через меню то кавычки появляются. Помогите решить данную проблему |
|
26.01.2005, 15:24 | #13 |
Участник
|
Цитата:
Изначально опубликовано YVAS
Смысл экселевского макроса понять не могу. Exel сам способен работать с форматом .csv при простом открытии если грамотно расположить разделители естественно. А проблема медленного экспорта действительно существует. Мы, например, выводим в Exel через ActiveX. Скорость вырастает в разы. Извините, а что за ActiveX ??? |
|
27.01.2005, 09:14 | #14 |
1C
|
2 simply2double:
Компонентина такая SpreadSheet, встроенная в Excel. Набирайте в окне поиска слово SpreadSheet здесь были ссылки про нее. |
|
27.01.2005, 09:29 | #15 |
Участник
|
Цитата:
Изначально опубликовано YVAS
2 simply2double: Компонентина такая SpreadSheet, встроенная в Excel. Набирайте в окне поиска слово SpreadSheet здесь были ссылки про нее. |
|
Теги |
excel |
|
|