![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
Spiage |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
Привет мастерам!
Нужен совет: Делаю формирование отчетов в Экселе, т.к. это требование заказчика Хотел бы ускорить скорость Но не могу использовать CopyFromRecordset, т.к. использую объединенные ячейки в шаблоне Хитрый Эксель не хочет понимать, что мне не надо подряд во все ячейки данные включать, а только в первые ячейки объединения Пока выкрутился заполнением по каждому столбцу отдельно Может быть кто-нибудь посоветует какой-нибудь более эффективный способ? Как вариант можно использовать запрос с пустыми строками в перемешку с данными, но это совсем не красиво... Проблема эффективности стоит из-за того, что заказчик предпологает использовать старый парк машин в филиалах |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Напрашивается предложение не использовать объединение ячеек... откуда такое параноидальное желание объединять?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Spiage |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
Я думал об этом, но причина в очень сложной форме бланков отчетности
И без уменьшения ширины столбцов и объединения не обойтись Может быть существует другой, более быстрый способ передачи данных в Эксель? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
не верю. Впрочем предлагаю такой способ: 1) Выливаем данные на неформатированную таблицу на листе. Это можно сделать быстро тем же CopyFromRecordset. 2) Бланк находится на другом листе, в нем в нужных ячейках - ссылки на тот лист куда мы бросим данные. Обновление происходит практически мгновенно. 3) Далее можно либо запустить макрос преобразования формул в значения на листе с бланком и потом прибить временный лист, либо оставить все как есть. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Spiage |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
Выводится не простой отчет, а "хитрый":
Шапка подотчет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 Вроде все замечания, пишу на случай, чтобы кому-нибудь съэкономить время в поисках решения (мне бы пригодилось какое-то время назад такое описание ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS Access" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Access | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |