|
Excel.Application слишком медленно работает | ☑ | ||
---|---|---|---|---|
0
terr
01.11.11
✎
09:08
|
Нужно сделать прайс с кучей колонок для номенклатуры (over9000 позиций)
при этом по группам сделать раскрывающиеся группировки и прочие ништяки с форматированием. Беда в том, что в цикле по выборке идет запись значений в ячейки - ну как в большинстве случаев и делают через COM-объект... Вот эта вся процедура занимает просто тучу времени. Вопрос - можно ли как-то сделать в табдок предварительный прайс а потом каким-то образом скопировать через буфер обмена и вставить в экселевский лист? Есть примеры кода богатырского? |
|||
1
terr
01.11.11
✎
09:09
|
ну понятно, что скорее всего форматирование потом придется доделывать отдельно, но это все равно уже проще... Интересует этап "скопировать-вставить"
|
|||
2
Александр_
Тверь 01.11.11
✎
09:12
|
а почему нельзя таб док сохранить в экселе? не подходит?
|
|||
3
Александр_
Тверь 01.11.11
✎
09:15
|
ТабДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS) не подходит?
|
|||
4
SuperMario
01.11.11
✎
09:15
|
(1) +1
|
|||
5
бомболюк
01.11.11
✎
09:18
|
Можно читать/писать данные диапазонами (Range). Получается очень быстро.
|
|||
6
terr
01.11.11
✎
09:44
|
дело в том что экселевский прайс содержит еще ряд листов, формул, макросов, гиперссылок. По любому придется копипастить
|
|||
7
vmv
01.11.11
✎
09:46
|
(6) конечно, делать программный вывод в экзел из 1С, подписываясь на макросы и формулы - это абсурд.
|
|||
8
terr
01.11.11
✎
09:46
|
(5) а как именно?
(6) есть устоявшаяся форма прайса к которой привыкли клиенты. Менять ее не хотят |
|||
9
smaharbA
01.11.11
✎
09:53
|
Иассив=Диапазон.Value;
|
|||
10
KishMish
01.11.11
✎
09:56
|
можно сделать макрос в шаблоне екселя и вызывать его с передачей параметров по каждой колонке.
за раз всю строку. |
|||
11
manyak
01.11.11
✎
10:41
|
(1) слишком медленно работает - это сколько конкретно по времени?
до начала работы с прайсом отключай обн. экрана и пересчет формул: excell.Calculation = -4135
после окончания включи обратно: excell.screenupdating = true
значительно ускорит процесс формирования |
|||
12
izekia
01.11.11
✎
10:44
|
(0) можно хмлтаблицу формировать, правда как я понял технология уже не модная, но поддерживаться будет
из минусов - там нельзя сделать раскрывающиеся группировки, те только доп обработкой, все остальное формируется и читается достаточно быстро |
|||
13
izekia
01.11.11
✎
10:45
|
(11) да судя по (0) нет у него там пересчетов, тупо данные
|
|||
14
mikecool
01.11.11
✎
10:45
|
если надо только через олю, то - выводить сначала данные, а оформлять уже в конце - ускорение наблюдал до двух порядков
|
|||
15
izekia
01.11.11
✎
10:47
|
(!4) за счет того что оформление применяется сразу ко всей таблице?)
|
|||
16
manyak
01.11.11
✎
10:47
|
идет запись значений в ячейки - excell.screenupdating=true хорошо замедляет работу.
Два основных момента: 1) Обновление - перерисовка экрана 2) Обновление - пересчет формул |
|||
17
mikecool
01.11.11
✎
10:48
|
(15) именно
|
|||
18
mikecool
01.11.11
✎
10:49
|
+17 ибо выводил прайсы по 200-300 тыщ строк с разбивкой по листам
офрмление при выводе занимало часа полтора, после вывода на всю таблицу - минут до 20 |
|||
19
izekia
01.11.11
✎
10:49
|
(16) вроде когда у приложения визибл = фалс ... то это ни на что не влияет ... насколько я помню
|
|||
20
izekia
01.11.11
✎
10:51
|
ну и комсейфмассив никто не отменял, судя по (0) это то что и нужно
|
|||
21
KishMish
01.11.11
✎
10:55
|
еще можно сформировать в 1с. сохранить как ексель. и через оле вставить/подменить нужный лист в шаблоне.
|
|||
22
terr
01.11.11
✎
10:58
|
(11) проверил спасибо, но ускорение составило не более 5%
а висибл сразу false стоял, чтоб не перерисовывало (21) - вот это я и хочу узнать - как? |
|||
23
izekia
01.11.11
✎
11:05
|
(22) своего поста не нашел
но вот что-то в тему v8: А вы знали, что можно так вот хитро ускорить выгрузку в Эксель? вкратце можно данные сохранять как чистый хмл и потом на основе какого-то шаблона производить хслт преобразование и получать нужный документ, минус, как я уже писал в (12) - отсутствие разворачивающихся группировок |
|||
24
KishMish
01.11.11
✎
11:17
|
(22) вот этот кусок у меня на 8 работает
ДобавляемыйФайл=Excel.WorkBooks.Open(ВременнаяПапка+НужноеИмяФайла); ДобавляемыйФайл.Sheets(1).Copy(,НоваяКнига.Sheets(НоваяКнига.Sheets.Count)); НоваяКнига.Sheets(НоваяКнига.Sheets.Count).Name=Название; ДобавляемыйФайл.Close(); |
|||
25
smaharbA
01.11.11
✎
14:18
|
в ветке готовый код, автору нас рать
|
|||
26
Паланик
01.11.11
✎
14:27
|
(22)
1. У меня та же беда была, раньше прайс фигачился за час-полтора, теперь минут 5-10, юзал отключение прорисовки скрина и пересчет формул, как советует manyak в (11). 2. в (3) намисано. |
|||
27
terr
02.11.11
✎
02:12
|
Спасибо всем
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |