10.07.2007, 14:54 | #39 |
Moderator
|
Продолжаю наслаждаться комбинацией несвязанного ADODB.Recordset в оперативной памяти и последующего Range.CopyFromRecordset в Excel. Пристегиваю этот способ ко всем новым задачкам, в которых требуется вывод в Excel.
Способ не наибыстрейший, но вполне комфортный по скорости. Тестовое задание этой ветки (50 тыс.строк X 10 полей) выполняется примерно за 80 сек. Это уже не просто джобом, а классом, который сам настраивает Recordset и может резать выводимую выборку как по критерию "65 тыс строк" на лист, так и по произвольно задаваемому групповому критерию - типа "все сотрудники на А на первый лист, на Б - на второй и т.д." - т.е. сам процесс вывода продирается через эти "рогатки". Основная причина же этой моей симпатии - возможность управления типами данных выводимых столбцов. Ради этой возможности я согласен ждать 50-60 лишних секунд Форматирую, если требуется, после вывода. Сразу большими Range'ми (целыми строками, столбцами, заголовками, областью данных), необходимые ссылки на которые создаются и запоминаются классом в процессе вывода. Это что касается спискообразных "автоотчетов". Для развесистых стандартных шаблонов (типа акта ОС-1) теперь тоже использую такой вывод с CopyFromRecordset. В файле шаблона создаю еще один лист, можно скрытый, на который вывожу одну строку с необходимыми данными. А в ячейках самого шаблона прописываю формулы-ссылки на ячейки этой выводимой строки. Подход родился в процессе решения задачи по пакетной печати нескольких тысяч актов ОС-1. Один CopyFromRecordset вместо многих присваиваний Range.Value(...) увеличил скорость процесса примерно в 30 раз (иначе можно было бы тихо загнуться на этой печати). |
|
|
За это сообщение автора поблагодарили: player (1). |
Теги |
benchmark, download, excel, faq, xml, законченный пример, производительность, экспорт/импорт |
|
|