Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Отчет из Access в Excel


Автор: Spiage 21.2.2005, 17:15
Привет мастерам!

Нужен совет:
Делаю формирование отчетов в Экселе, т.к. это требование заказчика
Хотел бы ускорить скорость
Но не могу использовать CopyFromRecordset, т.к. использую объединенные ячейки в шаблоне
Хитрый Эксель не хочет понимать, что мне не надо подряд во все ячейки данные включать, а только в первые ячейки объединения
Пока выкрутился заполнением по каждому столбцу отдельно

Может быть кто-нибудь посоветует какой-нибудь более эффективный способ?
Как вариант можно использовать запрос с пустыми строками в перемешку с данными, но это совсем не красиво...

Проблема эффективности стоит из-за того, что заказчик предпологает использовать старый парк машин в филиалах

Автор: Akina 21.2.2005, 17:31
Напрашивается предложение не использовать объединение ячеек... откуда такое параноидальное желание объединять?

Автор: Spiage 22.2.2005, 06:24
Я думал об этом, но причина в очень сложной форме бланков отчетности
И без уменьшения ширины столбцов и объединения не обойтись

Может быть существует другой, более быстрый способ передачи данных в Эксель?

Автор: Akina 22.2.2005, 09:08
Цитата(Spiage @ 22.2.2005, 07:24)
без уменьшения ширины столбцов и объединения не обойтись

не верю.

Впрочем предлагаю такой способ:
1) Выливаем данные на неформатированную таблицу на листе. Это можно сделать быстро тем же CopyFromRecordset.
2) Бланк находится на другом листе, в нем в нужных ячейках - ссылки на тот лист куда мы бросим данные. Обновление происходит практически мгновенно.
3) Далее можно либо запустить макрос преобразования формул в значения на листе с бланком и потом прибить временный лист, либо оставить все как есть.

Автор: Spiage 22.2.2005, 10:40
Выводится не простой отчет, а "хитрый":

Шапка
подотчет1 (со своим форматом ячеек)
подотчет2 (со своим форматом ячеек)
подотчет3, основной (со своим форматом ячеек)
подотчет4 (со своим форматом ячеек)
подотчет5 (со своим форматом ячеек)
подписи (со своим форматом ячеек)

Так что полностью без объединения и правда не олучается

Про преобразование формул:
Есть ли какой-то способ, кроме PasteSpecial Paste:=xlPasteValues для преобразования формулы в значение?

И большое спасибо за ответы, я сравню время и выложу более оптимальный вариант (формулы или CopyFromRecordSet по столбцам)
Уже могу сказать, что при формировании отчетов из Акцесса в Экселе быстрее всего получается так:
1. Создается шаблон отчета
2. В модуле листа отчета прописывается процедуры его формирования на основе передаваемого ADODB.Recordset
3. Заводятся 2 процедуры (для формирования отчета и для удаления листа шаблона)
4. Из Access вызываются только эти две процедуры (справнивал скорость, если из Access напрямую формировать - хуже примерно в 15-20 раз)
5. Для копирования быстрее всего срабатывает
ЛистШаблона.Range(<Именованые ячейки>).Copy Destination:=ЛистОтчета.Cells(строка, столбец)
6. В Access необходимо использовать перед выполнением наших процедур
oApp.Visible = False
oApp.UserControl = True
oApp.ScreenUpdating = False
и
oApp.ScreenUpdating = True
oApp.Visible = True
после
7. Для отключения вопроса об удалении листа шаблона использовать
до вызова второй процедуры
oApp.DisplayAlerts = False
после вызова второй процедуры
oApp.DisplayAlerts = True

Вроде все замечания, пишу на случай, чтобы кому-нибудь съэкономить время в поисках решения (мне бы пригодилось какое-то время назад такое описание smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)