Цитата(Vofka @ 26.07.12, 9:03) необходимо зарегистрироваться для просмотра ссылки
Я думаю, на 5000 строк вы особой разницы не почувствуете
. Та и писать то тут, в принципе, фигня. Процентов 70 кода будет одинакового в обоих обработках
:-) Уже почти дописал... Протестирую и напишу разницу во времени... А так же код... Может кому пригодится.. ))))
Для теста я использовал:
1. Виртуальный диск выделенный в оперативной памяти.
2. Два ексель документа по 5000 позиций
3. Алгоритм прямой роботы с ексель. (А)
4. Алгоритм роботы через Таблицу Значений. (Б)
Результат:
Алгоритм А показал 5 минут и 19 секунд
Алгоритм Б показал 52 секунды.
Привожу Вашему вниманию более быстрый
Извините за то-что он не изящен.
Торпился написать и протестить.
Процедура Выполнить2()
Имя=КаталогИБ()+"\xls\open.xls";
Лист=СоздатьОбъект("Excel.Application");
Лист.Workbooks.Open(Имя); //Добавляем новый документ
ТЗ1 = СоздатьОбъект("ТаблицаЗначений");
ТЗ1.НоваяКолонка("Код");
ТЗ1.НоваяКолонка("Имя");
ТЗ1.НоваяКолонка("Цена");
Лист.ScreenUpdating = 0;
Лист.EnableEvents = 0;
Лист.Visible = 0;
сч=0;
строкаЕхель=1;
пока сч<10 Цикл
Ячейка=СокрЛП(Лист.Cells(строкаЕхель,2).Value);
Если Ячейка="" Тогда
сч=сч+1;
Иначе
сч=0;
ТЗ1.НоваяСтрока();
ТЗ1.Код=СокрЛП(Лист.Cells(строкаЕхель,1).Value);
ТЗ1.Имя=СокрЛП(Лист.Cells(строкаЕхель,2).Value);
ТЗ1.Цена=0;
//Сообщить(ТЗ1.Код);
//Сообщить(ТЗ1.Имя);
КонецЕсли;
строкаЕхель=строкаЕхель+1;
КонецЦикла;
Имя2=КаталогИБ()+"\xls\test.xls";
Лист2=СоздатьОбъект("Excel.Application");
Лист2.Workbooks.Open(Имя2); //Добавляем новый документ
ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
ТЗ2.НоваяКолонка("Имя");
ТЗ2.НоваяКолонка("Цена");
сч=0;
строкаЕхель=1;
пока сч<10 Цикл
Ячейка=СокрЛП(Лист2.Cells(строкаЕхель,1).Value);
Если Ячейка="" Тогда
сч=сч+1;
Иначе
сч=0;
ТЗ2.НоваяСтрока();
ТЗ2.Имя=СокрЛП(Лист.Cells(строкаЕхель,1).Value);
ТЗ2.Цена=СокрЛП(Лист.Cells(строкаЕхель,6).Value);
//Сообщить(ТЗ2.Имя);
//Сообщить(ТЗ2.Цена);
КонецЕсли;
строкаЕхель=строкаЕхель+1;
КонецЦикла;
Имя3=КаталогИБ()+"\xls\Результат.xls";
Лист3=СоздатьОбъект("Excel.Application");
Лист3.Workbooks.Open(Имя3); //Добавляем новый документ
строкаЕхель=1;
ТЗ1.ВыбратьСтроки();
Пока ТЗ1.ПолучитьСтроку()=1 Цикл
ТЗ2.ВыбратьСтроки();
Пока ТЗ2.ПолучитьСтроку()=1 Цикл
Если ТЗ1.Имя=ТЗ2.Имя Тогда
Лист3.Cells(строкаЕхель,1).Value=ТЗ1.Код;
Лист3.Cells(строкаЕхель,2).Value=ТЗ1.Имя;
Лист3.Cells(строкаЕхель,3).Value=ТЗ1.Цена;
//Сообщить();
//Сообщить(ТЗ1.Код);
//Сообщить(ТЗ1.Имя);
//Сообщить(ТЗ2.Цена);
строкаЕхель=строкаЕхель+1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//******************************************************
Лист.ScreenUpdating = 1; //Ускореем
Лист.EnableEvents = 1; //Вывыд
Лист.Visible = 1; //в EXEL
//******************************************************
Сообщить(ТекущееВремя());
форма.закрыть();
КонецПроцедуры