Как и обещал, демонстрирую, как мгновенно загружается Excel файл с помощью ComSafeArray. Секрет - в выгрузке всего листа, который представляет собой CSA в массив 1С одной командой Выгрузить.
Правда, я еще транспонирую массив, чтобы первым измерением шли строки, вторым - колонки. Так привычнее обрабатывать. Но на это 1С тратит весьма небольшое время по сравнению с выгрузкой CSA в массив (ровно в два раза меньше), так что временем транспонирования можно пренебречь.
Код функции под катом.
Функция ЗагрузитьExcelФайлВМассивЛистов(ИмяФайла, ЗНАЧ СоответствиеФильтраЛистов = Неопределено)
//СоответствиеФильтраЛистов - соответствие содержащее числа с номерами листа (начиная с единицы)
//Или названия листов в виде строки.
//Возвращается массив структур с полями:
// Номер - номер листа с единицы
// Имя - имя листа строкой
// Строк - количество строк
// Колонок - количество колонок
// Ячейки - двумерный массив колонок, первое измерение - строка, второе - колонка
Перем МассивЛистов;
МассивЛистов = Новый Массив(); //Это масс
Эксель = New COMObject("Excel.Application");
Эксель.visible = false;
Книга = Эксель.Workbooks.Open(ИмяФайла);
Для НомерЛиста = 1 To Книга.Sheets.Count Цикл
Лист = Книга.Sheets(НомерЛиста);
ИмяЛиста = Лист.Name;
Если СоответствиеФильтраЛистов <> Неопределено Тогда
Если СоответствиеФильтраЛистов[НомерЛиста] = Неопределено
И СоответствиеФильтраЛистов[ИмяЛиста] = Неопределено
Тогда
Продолжить; //Если лист грузить не надо
КонецЕсли;
КонецЕсли;
КоличествоСтрок = Лист.UsedRange.Rows.Count;
КоличествоКолонок = Лист.UsedRange.Columns.Count;
CSAМассив= Лист.Range(Лист.Cells(1, 1), Лист.Cells(КоличествоСтрок, КоличествоКолонок)).Value;
//ОбщееКоличествоКолонок = CSAМассив.GetUpperBound(0);
//ОбщееКоличествоСтрок = CSAМассив.GetUpperBound(1);
ЯчейкиВыгруженные = CSAМассив.Выгрузить();
//Транспонирование, все же привычнее, чтобы в первом измерении были строки, а в колонках-колонки.
Ячейки = Новый Массив(КоличествоСтрок, КоличествоКолонок);
Для Строка = 1 По КоличествоСтрок Цикл
Для Колонка = 1 По КоличествоКолонок Цикл
Ячейки[Строка - 1][Колонка - 1] = ЯчейкиВыгруженные[Колонка - 1][Строка - 1];
КонецЦикла;
КонецЦикла;
СтруктураЛиста = Новый Структура();
СтруктураЛиста.Вставить("Строк", КоличествоСтрок);
СтруктураЛиста.Вставить("Колонок", КоличествоКолонок);
СтруктураЛиста.Вставить("Ячейки", Ячейки);
СтруктураЛиста.Вставить("Номер", НомерЛиста);
СтруктураЛиста.Вставить("Имя", ИмяЛиста);
МассивЛистов.Добавить(СтруктураЛиста);
КонецЦикла;
Книга.Close();
Возврат МассивЛистов;
КонецФункции
Journal information