Имя: Пароль:
1C
1С v8
Тормоза 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 спасибо! Остальным тоже)
Программист всегда исправляет последнюю ошибку.