Показать сообщение отдельно
Старый 10.07.2007, 14:54   #78  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Продолжаю наслаждаться комбинацией несвязанного ADODB.Recordset в оперативной памяти и последующего Range.CopyFromRecordset в Excel. Пристегиваю этот способ ко всем новым задачкам, в которых требуется вывод в Excel.

Способ не наибыстрейший, но вполне комфортный по скорости. Тестовое задание этой ветки (50 тыс.строк X 10 полей) выполняется примерно за 80 сек. Это уже не просто джобом, а классом, который сам настраивает Recordset и может резать выводимую выборку как по критерию "65 тыс строк" на лист, так и по произвольно задаваемому групповому критерию - типа "все сотрудники на А на первый лист, на Б - на второй и т.д." - т.е. сам процесс вывода продирается через эти "рогатки".

Основная причина же этой моей симпатии - возможность управления типами данных выводимых столбцов. Ради этой возможности я согласен ждать 50-60 лишних секунд

Форматирую, если требуется, после вывода. Сразу большими Range'ми (целыми строками, столбцами, заголовками, областью данных), необходимые ссылки на которые создаются и запоминаются классом в процессе вывода. Это что касается спискообразных "автоотчетов".

Для развесистых стандартных шаблонов (типа акта ОС-1) теперь тоже использую такой вывод с CopyFromRecordset. В файле шаблона создаю еще один лист, можно скрытый, на который вывожу одну строку с необходимыми данными. А в ячейках самого шаблона прописываю формулы-ссылки на ячейки этой выводимой строки. Подход родился в процессе решения задачи по пакетной печати нескольких тысяч актов ОС-1. Один CopyFromRecordset вместо многих присваиваний Range.Value(...) увеличил скорость процесса примерно в 30 раз (иначе можно было бы тихо загнуться на этой печати).
За это сообщение автора поблагодарили: player (1).