Имя: Пароль:
1C
1С v8
Долгое программное заполнение листа Excel в 2010 офисе
,
0 fisher
 
19.03.14
17:43
Не могу понять, в чем дело. На 2007 - всё нормально.
Под 2010 - в разы медленнее. Включая простую запись значения в ячейку.
Кто сталкивался и как лечил?
1 МихаилМ
 
19.03.14
17:48
в "На"(На 2007) и "Под"(Под 2010)
2 fisher
 
19.03.14
17:57
Вернее, разница больше чем на порядок.
Простая запись значения в ячейку в 2007 занимает меньше 2 мс, в 2010 - 28 мс. Простейшее формирование сраной странички стало занимать минуты вместо секунд.
Куда копать - не представляю.
3 МойКодУныл
 
19.03.14
17:58
Формировать таб документ и его сохранять в excel уже заполненным.
4 fisher
 
19.03.14
18:01
(3) Не вариант. Ты думаешь, я это от нечего делать себе руки выкручиваю? Результирующий док надо формировать на основе екселевского шаблона.
5 fisher
 
19.03.14
18:03
Сначала думал - дело в совместимых форматах. Пересохранил шаблоны в 2010 екселе - без толку.
6 fvadim
 
19.03.14
18:11
а если попробовать перед заполнением екселю сделать EnableEvents = Ложь?
ну и лист не показывать пока идёт заполнение.
7 Jaap Vduul
 
19.03.14
18:19
Может там куча формул пересчитывается?
И в 2007 Calculation = Manual а в 2010 Automatic?
8 fisher
 
19.03.14
18:20
ExcelApp.Calculation = -4135;
ExcelApp.ScreenUpdating = 0;
ExcelApp.EnableEvents = 0;
ExcelApp.Visible = 0;

Всё без толку...
9 Jaap Vduul
 
19.03.14
18:26
Условное форматирование?
10 fisher
 
19.03.14
18:27
Статическое.
Шаблон содержит шапку и шаблоны строк разных видов.
В обработке происходит копирование вставка шаблонов строк и заполнение значений. Всё.
11 fisher
 
19.03.14
18:28
Причем тупняк даже простом заполнении значения ячейки, см. (2)
12 elCust
 
19.03.14
18:31
При работе с масштабными данными в Excel используй COMSafeArray. В разы быстрее.
13 fisher
 
19.03.14
18:34
(12) Слыхал. Но у меня несчастных 5 циферок на строку и до двухсот строк. Производительность вполне устраивала. Не думаю, что смогу получить существенный выигрыш при своей проблеме.
14 fisher
 
19.03.14
18:57
Хм... Похоже, что производительность от количества строк зависит нелинейно. Это наводит на мысли...
15 fisher
 
19.03.14
19:37
Короче, накопительные тормоза появляются при использовании копирования/вставки строк шаблона. Если просто заполнять данные в неоформленные строки - то запись значения в ячейку в среднем идет 4 мс.
Копирование/вставку и так и эдак переписывал. Тормоза не уходят.
Последний вариант:
Sheet.Rows(НомерСтрокиШаблона + ":" + НомерСтрокиШаблона).Copy();
Sheet.Rows(НомерНовойСтроки + ":" + НомерНовойСтроки).Insert(-4121);
Как еще это можно обыграть? У меня фантазия кончилась.
16 МихаилМ
 
19.03.14
19:52
(15)
макрос создать и испольнить
17 fisher
 
20.03.14
11:08
(16) Да это целое дело. Доступ к макросам разрешать... И далеко не факт что полечит.
18 fvadim
 
20.03.14
11:22
(17) способ через ж:
использовать xlsx и работать с xml напрямую, вроде и либы есть.
19 fisher
 
21.03.14
13:39
Установка сервис-паков проблему не решила :(
20 fvadim
 
21.03.14
13:45
в надстройках лишнего не включено?
если антивирь вырубить что-нибудь меняется?
21 fvadim
 
21.03.14
13:50
вот ещё интересное наблюдение
отсюда
http://axforum.info/forums/showthread.php?t=38361
"В итоге покопались в настройках Excel - для листов на которые происходит выгрузка, в случае, если установлен режим просмотра страницы "Разметка страницы" или "Страничный", то выгрузка идет намного медленнее, если же поставить значение "Обычный", то время выгрузки существенно уменьшается."