Всем привет! Сегодня хотел бы поделиться с Вами функцией, читающей файл excel. В работе 1С программиста это очень частая задача - загрузить Номенклатуру, Тарифы, Цены поставщика, Показания счетчиков. И все это, обычно, заботливые пользователи предоставляют нам в файлике формата excel. Существует множество способов чтения excel файлов из 1С. Это
и средствами Microsoft ADO,
и средствами 1С через ПостроительDOM,
и чтение файлов xlsx средствами 1С ЧтениеXML.
Но в своей 6-ти летней практике, за исключением нескольких случаев, меня всегда спасала одна и та же функция. Ее текст представлен ниже.
Функция ПрочитатьЛистExcel(файл = Неопределено, НомерПервойСтроки = 2, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0, лист = 1) Экспорт
Попытка
ЛистЭксель = Новый COMОбъект("Excel.Application");
ЛистЭксель.WorkBooks.Open(файл);
ЛистЭксель.Sheets(лист).Select();
Исключение
;
КонецПопытки;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("к"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель.Quit();
Возврат ТЗ;
КонецФункции
Здесь все просто, в функцию передаем полное имя файл на диске "файл", номер листа "лист" и номера строки и колонки, с которой нужно считать файл. На выходе получаем заполненную таблицу значений "ТЗ", в которой все колонки идут по порядку файла, в наименованиях которых указан префикс "к". Т.е. первая колонка - это к1.
Пройдясь в цикле по таблице, получим содержимое файла.
Для Каждого _строка Из ТЗ Цикл
СодержимоеПервойЯчейки = _строка.к1;
КонецЦикла;
Да, для использования данной функции обязательно наличие установленного excel в системе. Но для быстрого чтения - самое оно!
Надеюсь, кому-то будет полезно.