|
Тормоза Excel'я при построчном переборе ячеек. | ☑ | ||
---|---|---|---|---|
0
Паланик
26.10.11
✎
12:12
|
Сохраняю 1Ской табдок в эксель, затем открываю его для обработки строк, и заметил жуткие тормоза, буквально по часу обработка в экселе идет. Поставил счетчик в строку состояния и видно, что начиная с 475й строки счетчик идет 1 запись в 3-4 секунды, а прайс из 3-5 тысю строк состоит. Оставлял голый цикл, быстрей - но все равно с тормозами с 475йстроки. Как победить эту беду? Никто не сталкивался?
ИмяФайла = "\Прайс от " + Формат(НаДату, "ДФ=dd.MM.yyyy")+ ".xls"; ТабДок.Записать(Путь + ИмяФайла, ТипФайлаТабличногоДокумента.XLS); ТаблицаExcel = Новый COMОбъект("Excel.Application"); ТаблицаExcel.Workbooks.Open(Путь + ИмяФайла); Лист = ТаблицаExcel.Workbooks(1).Worksheets(1); //Фиксация шапки, затем активизация фиксации. ТаблицаExcel.ActiveWindow.SplitRow = 11; ТаблицаExcel.ActiveWindow.FreezePanes = 1; //Шапка поменяется - не забыть тут поменять началную строку Строка = 13; Пока Лист.Cells(Строка, 1).Text <> "." Цикл // Если Лист.Cells(Строка, 13) <> "" Тогда // Лист.Cells(Строка, 13).Hyperlinks.Add(Лист.Cells(Строка, 13), "http://sphera-s.com/include/sphera_shop/sphera_image/" + СокрЛП(Лист.Cells(Строка, 1).Text) + Размер); // Лист.Cells(Строка, 25).Formula = "=RC[-7]*RC[-4]"; //КонецЕсли; Ячейка = Лист.Cells(Строка, 13); ДопКод = СокрЛП(Лист.Cells(Строка, 1).Text); ГиперСсылка = "http://sphera-s.com/include/sphera_shop/sphera_image/" + ДопКод + Размер; Если Ячейка.Text <> "" Тогда Ячейка.Hyperlinks.Add(Ячейка, ГиперСсылка); Лист.Cells(Строка, 25).Formula = "=RC[-7]*RC[-4]"; КонецЕсли; Строка = Строка + 1; Состояние("Срока номер: "+ Строка); ОбработкаПрерыванияПользователя(); КонецЦикла; |
|||
1
DrShad
26.10.11
✎
12:14
|
ComSafeAray юзать религия не позволяет?
|
|||
2
Паланик
26.10.11
✎
12:23
|
(1) Мне по сути нужно делать одну ячейку гиперссылкой, и в другую формулу внести. Расскажи вкратце суть использования такого объекта. Он вроде как выводит данные в эксель, а мне их менять нужно.
|
|||
3
DrShad
26.10.11
✎
12:26
|
(2) да он для считывания
|
|||
4
BladeWorld
26.10.11
✎
12:30
|
(0) Попробуй через RecordSet
|
|||
5
Паланик
26.10.11
✎
12:31
|
(3) Тогда не вариант. Как так - я понять не могу, выгружается в экслеь файл размером 4 метра, а тормоза жуткие. Я даже когда прерву, не могу открыть эксель - по 20 секунд каждое действие, на ячейке курсор переместить - ждать приходится.
|
|||
6
Паланик
26.10.11
✎
12:37
|
(4) Кинь, плиз, пример кода если есть, быстрей вникну.
|
|||
7
BladeWorld
26.10.11
✎
12:45
|
(6) Под рукой нет, в поиске поищи, здесь много аналогичных тем есть
|
|||
8
FN
26.10.11
✎
12:45
|
Сохрани файл как csv, потом его открой и пересохрани в xls. Потом попробуй запустить обработку. Если тормозов не будет - значит "проблема в самом файле".
ЗЫ бывает такое... |
|||
9
FN
26.10.11
✎
12:46
|
(4) а как через RecordSet устанавливать http-ссылки?
|
|||
10
BladeWorld
26.10.11
✎
12:49
|
(9) Хороший вопрос:), я ссылки не вставлял. А что, вставлять нельзя?
|
|||
11
FN
26.10.11
✎
12:53
|
(10) сомневаюсь, что через RecordSet можно достучаться до Hyperlinks
Хотя я и не пытался ни разу :) |
|||
12
Паланик
26.10.11
✎
13:02
|
Попробую подсунуть другой прайс и посмотреть на скорость обхода на нем...
|
|||
13
BladeWorld
26.10.11
✎
13:04
|
А если макрос сделать и им заполнить?
|
|||
14
shuhard
26.10.11
✎
13:05
|
(11) вероятно через ADOX
|
|||
15
Паланик
26.10.11
✎
13:10
|
(13) Слабо помню синтаксис VB, это крайний выход.
(14) Кинь код, плиз) |
|||
16
Dmitry77
26.10.11
✎
13:11
|
убери в Екселе объединение ячеек и будет тебе счастье.
|
|||
17
Паланик
26.10.11
✎
13:14
|
(16) Вообще убрать из листа или в изменяемых колонках ячеек?
|
|||
18
Леха Дум
26.10.11
✎
13:22
|
(13) макрос тоже не сильно шустро работает. Я через макрос строки текста более 256 знаков вставлял - то еще счастье наблюдать это процесс.
|
|||
19
Dmitry77
26.10.11
✎
13:28
|
(17) вообще из листа
|
|||
20
manyak
26.10.11
✎
13:31
|
до выгрузки отключай обн. экрана и пересчет формул:
excell.Calculation = -4135 excell.screenupdating = false после выгрузки включи обратно: excell.screenupdating = false excell.Calculation = -4105 |
|||
21
manyak
26.10.11
✎
13:32
|
после выгрузки включи обратно:
excell.screenupdating = true excell.Calculation = -4105 |
|||
22
Паланик
26.10.11
✎
13:48
|
(19) Ок, попробую вечером.
(20) До выгрузки из табдока в эксель и после? Сама выгрузка то не сильно тормзит, минуту где-то идет. Что это дает? |
|||
23
Паланик
26.10.11
✎
13:51
|
(21) Чтоб знать, скажи, что значит значение = -4135 и -4105?
|
|||
24
manyak
26.10.11
✎
14:05
|
xlCalculationAutomatic -4105 Excel controls recalculation.
xlCalculationManual -4135 Calculation is done when the user requests it. 4105 вкл. пересчет 4135 пересчет будет только когда сам пользователь сделает пересчет ну а откл. пересчета и обн. пересчета делай до обработки строк, после обработки обратно все включи |
|||
25
Паланик
26.10.11
✎
14:14
|
(24) Теперь понял, тоже попробую)
Пока вроде советов хватило, завтра отпишу, что помогло. Спасибо, мужики) |
|||
26
vmv
26.10.11
✎
14:15
|
(0) продвинутые чуваки с мисты уже давно научились читать екзел массивами колонок, перебор строк для семерошников тока)
|
|||
27
Паланик
26.10.11
✎
14:21
|
(26) Дак я не читаю, а пишу. Хотя, так и так - продвинутым себя не считаю)
|
|||
28
FN
26.10.11
✎
15:45
|
(26) продвинутые чуваки с мисты уже давно разучились читать посты внимательно
|
|||
29
Паланик
27.10.11
✎
10:15
|
Помогло отключение обновления скрина и пересчета формул, другие варианты не пробовал.
manyak спасибо! Остальным тоже) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |