1С: Оптимизация времени разбора большого XLSX файла
Для чтения и разбора файлов формата xlsx на 1С обычно используют следующую схему разбора файла:
ТабличныйДокументХар = Новый ТабличныйДокумент;
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);
// читаем каждый лист по отдельности
Для Каждого ОбластьТД ИЗ ТабличныйДокументХар.Области Цикл
ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(ОбластьТД.Имя,);
КолВоСтрокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоВертикали();
КолВоКолонокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали();
НачСтрока=3;КонСтрока=0;
НачСтрока = ?(НачСтрока = 0, 2, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрокФайла, КонСтрока);
// перебираем все строки без шапки
Для нСтрокаТФ = НачСтрока ПО КонСтрока Цикл
ПКолонка=Формат(ном_кол, "ЧГ=0");
Данные=ОбластьФайла.ПолучитьОбласть("R"+ПСтрока + "C1").ТекущаяОбласть.Текст ;
конеццикла
конеццикла
Так-же встречается другой вариант, у которого есть особенность — не учитывается что файл может содержать листы:
ТабличныйДокументХар = Новый ТабличныйДокумент;
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);
КолВоСтрокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоВертикали();
КолВоКолонокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоГоризонтали();
СтрокиДиапазона = 50000;
НачСтрокаДиапазона = 3;
КонСтрокаДиапазона = мин(КолВоСтрокФайла, СтрокиДиапазона);
КолВоСтрокФайла_часть = КолВоСтрокФайла;
Пока КолВоСтрокФайла_часть>0 Цикл
ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(НачСтрокаДиапазона,1,КонСтрокаДиапазона,КолВоКолонокФайла);
Если КолвоСтрокФайла = 0 Тогда ТабличныйДокументХар = Неопределено;КонецЕсли;
Для стр = 1 по КонСтрокаДиапазона-НачСтрокаДиапазона+1 Цикл
Данные=ОбластьФайла.Область(стр,2).Текст;
КонецЦикла;
КолВоСтрокФайла_часть = КолВоСтрокФайла_часть-СтрокиДиапазона;
НачСтрокаДиапазона = НачСтрокаДиапазона +СтрокиДиапазона;
КонСтрокаДиапазона = КонСтрокаДиапазона +СтрокиДиапазона;
КонецЦикла;
Если сравнивать производительность каждого метода, то выходит следующая картина (для файла размером 254 тыс строк):
| Метод 1 | Метод 2 | |
| Время работы кода | 1 784 сек | 714 сек |


