Как реализовать загрузку данных из Excel в 1С, если на сервере не установлен MS Office?

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

Зачастую перед разработчиками 1С встает задача автоматизированной загрузки прайс-листов, справочников или иных данных из файлов формата Excel. Главная сложность возникает в серверной среде (например, при работе на Linux-сервере или на Windows-сервере без установленного пакета MS Office), где использование COM-объектов типа Excel.Application невозможно.

Рассмотрим подробно, как решить эту задачу штатными средствами платформы 1С:Предприятие, не прибегая к стороннему платному ПО.

Использование объекта ТабличныйДокумент для чтения файлов

Современная платформа 1С обладает встроенным функционалом для работы с файлами табличных форматов. Самый простой и надежный способ прочитать файл — использовать объект ТабличныйДокумент. Этот объект поддерживает чтение файлов форматов .xls и .xlsx напрямую.

Для реализации этого метода выполним следующие шаги:

  1. Создадим экземпляр объекта ТабличныйДокумент.
  2. Вызовем метод Прочитать(), передав ему путь к файлу.
  3. Для корректного распознавания данных используем параметр СпособЧтенияЗначенийТабличногоДокумента.

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


ТабДок = Новый ТабличныйДокумент;
// Указываем путь к файлу и способ чтения значений
ТабДок.Прочитать(ВыбранноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

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

Преобразование данных в ТаблицуЗначений через ПостроительЗапроса

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

Важное условие: первая строка вашего Excel-файла должна содержать заголовки колонок, которые станут именами полей в будущей таблице данных.

Реализуем процесс трансформации:


// Создаем объект ПостроительЗапроса
ПостроительЗапроса = Новый ПостроительЗапроса;
// Указываем область данных (обычно это весь лист)
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область("Лист1")); 
ПостроительЗапроса.Выполнить();

// Получаем результат в виде таблицы значений
РезТаб = ПостроительЗапроса.Результат.Выгрузить();

// Теперь можно легко обходить данные
Для Каждого СтрокаТЗ из РезТаб Цикл
    // Обращаемся к данным по имени колонки, которое было в первой строке Excel
    Товар = СтрокаТЗ.Товар;
    Цена = СтрокаТЗ.Цена;
КонецЦикла;

Альтернативные методы и лучшие практики

Если структура файла сложная (например, наличие объединенных ячеек или многоуровневых заголовков), стандартный ТабличныйДокумент может обработать их не так, как ожидается. В таких ситуациях рекомендуем рассмотреть следующие подходы:

Важные рекомендации при загрузке

При реализации любого из предложенных методов помните о необходимости валидации данных:

  1. Всегда проверяйте типы данных. Excel может интерпретировать число как текст, если в ячейке стоит пробел или апостроф.
  2. Очищайте данные от «мусорных» строк (например, пустых строк в конце файла).
  3. Используйте Попытка...Исключение при записи полученных данных в базу 1С, чтобы избежать аварийного завершения обработки при возникновении ошибок типизации.

Используя объект ТабличныйДокумент и ПостроительЗапроса, вы получаете универсальный инструмент, который работает стабильно на любом сервере, независимо от наличия установленного офисного пакета.

← На главную