Эксель - самое популярное средство подготовки отчетов, печатных форм, сверок с клиентами и поставщиками.
За все время работы с ним накопилось достаточно тонкостей, которые в разы (иногда в десятки раз) увеличивают скорость работы. Итак:
1) самый медленный способ выкинуть что-то в эксель - это использовать стандартный функционал Excel Buffer :-)
Самый быстрый - получить (или сформировать самостоятельно) ADODB.Recordset, и затем использовать метод objRange.CopyFromRecordset.
Для некоторых версий приходится сначала присвоить рекордсет переменной типа Variant. Я делаю это всегда:
Результаты превзойдут все ваши смелые ожидания. Только помните, что эксель не принимает больше (attention!) 65000 строк.
Небольшая ремарка - после того, как в одном из предыдущих выпусков была описана венгерская нотация для Navision, думаю, больше нет нужды в коде указывать типы переменных :-)
2) обработка идет быстрее, если приложения не видно на экране. Т.е. xlApplication.Visible := FALSE.
Видеть эксель на экране стоит лишь во время написания и отладки кода, в рабочей версии свойство Visible лучше устанавливать в TRUE в последнюю очередь.
Кстати, с этим связана одна проблема, полного решения которой получить до сих пор не удалось.
При возникновении ошибки этот невидимый эксель остается висеть в памяти, и удалить его можно только через диспетчер задач.
Если у вас есть решение - пишите на likeart@mail.ru - опубликуем!
3) обработка идет быстрее, если в шаблоне указан Вид - "Обычный". Ни в коем случае не указывайте "Разметка страницы" - рискуете не дождать сформированного документа.
Бывали случаи, когда терпеливый юзер ждал формирования документа из 300 строк около часа. Когда нормой для такого количества является несколько секунд.
Почему так приосходит? В режиме "Разметка страницы" эксель постоянно рассчитывает область печати и делит документ на страницы. Результат - тормоза. Из этого, кстати, следует следующий пункт :-)
4) когда вы формируете многостраничный документ с форматированием, не вставляйте разрывы страниц по мере формирования документа.
Лучше записывайте номера строк, где это надо сделать, во временную таблицу, и УЖЕ ПОСЛЕ ФОРМИРОВАНИЯ документа запускайте отдельную функцию,
которая расставит разрывы в нужных местах. Экономия времени коллоссальная.
5) то же самое касается и всего остального форматирования. По мере возможности выносите его отдельно, укрупняйте, старайтесь форматировать документ крупными блоками,
вместо того, чтобы прорисовывать границы у каждой ячейки.
6) с опаской используйте метод Columns.Autofit. На большом диапазоне он может подвесить эксель. Лучше заранее выставьте ширину столбцов так, как требуется в большинстве случаев.
Здесь еще может помочь свойство ячейки - «Отображение» - «Автоподбор Ширины». Для печати бумажных документов это просто незаменимая вещь.
Кстати, столь любимая мной конструкция WITH ... END не работает с Automation-серверами. Не знаю, почему,
но в самый неподходящий момент вы можете получить сообщение об ошибке на ровном месте :-(
Вот такой краткий экскурс. Это не все :-) Ждите продолжения в следующих выпусках.
Надеюсь, этот выпуск будет полезен всем, кто работает с экселем через Navision. Лично у меня в свое время применение этих методов сократило время менеджеров на подготовку отчетов минимум в 10 раз.
P.S. Хотите поделиться своими знаниями? Всегда Welcome! Любые статьи, Q & A, FAQ, советы - все опубликуем, обязательно укажем автора и дадим линк на сайт :-)
С наилучшими пожеланиями,
Андрей Стрельников.
Группа «Technologies like Art».
Разработки в сфере Navision. Скоростные и суперскоростные оптимизации, системная интеграция.
e-mail: likeart@mail.ru.