Как загрузить файл Excel (XLS/XLSX) в 1С без использования COM и внешних обработок?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает необходимость загрузить данные из файлов форматов .xls или .xlsx в платформу 1С. Однако бывают ситуациях и ограничения (например, работа на сервере под управлением Linux, запрет на регистрацию сторонних библиотек или жесткие правила конкурса), когда нельзя прибегать к объекту COMОбъект("Excel.Application") или сторонним внешним обработкам.

Рассмотрим самый простой, короткий и штатный способ загрузки файлов Excel средствами платформы 1С.

Базовый метод чтения файла Excel

Для считывания файла Excel в платформе 1С предусмотрен встроенный метод Прочитать() объекта ТабличныйДокумент. Он позволяет загрузить содержимое файла непосредственно в память без запуска сторонних программ.

Разберем базовый пример кода:


ИмяФайла = "C:\Files\Data.xlsx";
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);

Данный метод поддерживает форматы .xls, .xlsx и .ods. Однако обратите внимание, что по умолчанию считывается только первый (активный) лист книги Excel.

Поячеечный обход полученных данных

После того как данные прочитаны в объект ТабличныйДокумент, мы можем проанализировать их и перенести в нужные справочники, документы или таблицы значений. Для этого используем обход ячеек в цикле:

  1. Определим границы таблицы с помощью свойств ВысотаТаблицы и ШиринаТаблицы.
  2. Обойдем строки и колонки для получения текстовых значений ячеек.

Проанализируем пример кода для поэлементного чтения:


ВсегоСтрок = ТабДок.ВысотаТаблицы;
ВсегоКолонок = ТабДок.ШиринаТаблицы;

Для НомерСтроки = 1 По ВсегоСтрок Цикл
    Для НомерКолонки = 1 По ВсегоКолонок Цикл
        ЗначениеЯчейки = ТабДок.Область(НомерСтроки, НомерКолонки).Текст;
        // Обработка полученного значения
    КонецЦикла;
КонецЦикла;

Быстрая выгрузка в ТаблицуЗначений через ПостроительЗапроса

Если вам необходимо быстро преобразовать прочитанный ТабличныйДокумент в ТаблицуЗначений без использования явных циклов, можно применить инструмент ПостроительЗапроса.

Рассмотрим порядок действий:


ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);

Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
Построитель.ЗаполнитьНастройки();
Построитель.Выполнить();

ТаблицаРезультат = Построитель.Результат.Выгрузить();

Управление способом чтения значений

При вызове метода Прочитать() можно передовать второй параметр — системное перечисление СпособЧтенияЗначенийТабличногоДокумента, которое определяет тип загружаемых данных:

  1. СпособЧтенияЗначенийТабличногоДокумента.Значение — сохраняет исходные типы (числа, даты).
  2. СпособЧтенияЗначенийТабличногоДокумента.Текст — считывает форматированный текст точно в том виде, в котором он отображался в ячейке.

ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

Важные особенности и ограничения

Выясним несколько ключевых нюансов, о которых нужно помнить при работе с методом Прочитать():

  1. Клиент-серверное выполнение: Если код исполняется на стороне сервера, файл с клиента нельзя прочитать по прямому локальному пути. Сначала его необходимо поместить во временное хранилище на клиенте, а на сервере сохранить во временный файл с помощью функции ПолучитьИмяВременногоФайла().
  2. Формат файлов: Метод выдаст ошибку, если загружаемый файл сохранили в устаревшем формате (например, Excel 95) или если файл с расширением .xls на самом деле является переименованным HTML или CSV.
← На главную