|
Долгое программное заполнение листа 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 - для листов на которые происходит выгрузка, в случае, если установлен режим просмотра страницы "Разметка страницы" или "Страничный", то выгрузка идет намного медленнее, если же поставить значение "Обычный", то время выгрузки существенно уменьшается." |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |