При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки раз.
Вот текст функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт Если ЛистЭксель = Неопределено Тогда ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); КонецЕсли; Если ВсегоСтрок = 0 Тогда ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; КонецЕсли; Если ВсегоКолонок = 0 Тогда ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column; КонецЕсли; Если ТЗ = Неопределено Тогда ТЗ = Новый ТаблицаЗначений; Для Счетчик = 1 По ВсегоКолонок Цикл ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка")); КонецЦикла; КонецЕсли; Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить(); КонецЦикла; Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); Данные = Область.Value.Выгрузить(); Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик); КонецЦикла; ЛистЭксель = Неопределено; Возврат ТЗ; КонецФункции |
Комментировать функцию, думаю, нет необходимости. Вот собственно и все, что я хотел сказать.
wildhog