В процессе разработки часто возникает необходимость загрузить данные из файлов форматов .xls или .xlsx в платформу 1С. Однако бывают ситуациях и ограничения (например, работа на сервере под управлением Linux, запрет на регистрацию сторонних библиотек или жесткие правила конкурса), когда нельзя прибегать к объекту COMОбъект("Excel.Application") или сторонним внешним обработкам.
Рассмотрим самый простой, короткий и штатный способ загрузки файлов Excel средствами платформы 1С.
Для считывания файла Excel в платформе 1С предусмотрен встроенный метод Прочитать() объекта ТабличныйДокумент. Он позволяет загрузить содержимое файла непосредственно в память без запуска сторонних программ.
Разберем базовый пример кода:
ИмяФайла = "C:\Files\Data.xlsx";
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);
Данный метод поддерживает форматы .xls, .xlsx и .ods. Однако обратите внимание, что по умолчанию считывается только первый (активный) лист книги Excel.
После того как данные прочитаны в объект ТабличныйДокумент, мы можем проанализировать их и перенести в нужные справочники, документы или таблицы значений. Для этого используем обход ячеек в цикле:
ВысотаТаблицы и ШиринаТаблицы.Проанализируем пример кода для поэлементного чтения:
ВсегоСтрок = ТабДок.ВысотаТаблицы;
ВсегоКолонок = ТабДок.ШиринаТаблицы;
Для НомерСтроки = 1 По ВсегоСтрок Цикл
Для НомерКолонки = 1 По ВсегоКолонок Цикл
ЗначениеЯчейки = ТабДок.Область(НомерСтроки, НомерКолонки).Текст;
// Обработка полученного значения
КонецЦикла;
КонецЦикла;
Если вам необходимо быстро преобразовать прочитанный ТабличныйДокумент в ТаблицуЗначений без использования явных циклов, можно применить инструмент ПостроительЗапроса.
Рассмотрим порядок действий:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
Построитель.ЗаполнитьНастройки();
Построитель.Выполнить();
ТаблицаРезультат = Построитель.Результат.Выгрузить();
При вызове метода Прочитать() можно передовать второй параметр — системное перечисление СпособЧтенияЗначенийТабличногоДокумента, которое определяет тип загружаемых данных:
СпособЧтенияЗначенийТабличногоДокумента.Значение — сохраняет исходные типы (числа, даты).СпособЧтенияЗначенийТабличногоДокумента.Текст — считывает форматированный текст точно в том виде, в котором он отображался в ячейке.
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Выясним несколько ключевых нюансов, о которых нужно помнить при работе с методом Прочитать():
ПолучитьИмяВременногоФайла()..xls на самом деле является переименованным HTML или CSV.