Зачастую перед разработчиками 1С встает задача автоматизированной загрузки прайс-листов, справочников или иных данных из файлов формата Excel. Главная сложность возникает в серверной среде (например, при работе на Linux-сервере или на Windows-сервере без установленного пакета MS Office), где использование COM-объектов типа Excel.Application невозможно.
Рассмотрим подробно, как решить эту задачу штатными средствами платформы 1С:Предприятие, не прибегая к стороннему платному ПО.
Современная платформа 1С обладает встроенным функционалом для работы с файлами табличных форматов. Самый простой и надежный способ прочитать файл — использовать объект ТабличныйДокумент. Этот объект поддерживает чтение файлов форматов .xls и .xlsx напрямую.
Для реализации этого метода выполним следующие шаги:
ТабличныйДокумент.Прочитать(), передав ему путь к файлу.СпособЧтенияЗначенийТабличногоДокумента.Разберем пример кода:
ТабДок = Новый ТабличныйДокумент;
// Указываем путь к файлу и способ чтения значений
ТабДок.Прочитать(ВыбранноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
После выполнения данного кода файл будет загружен в память сервера в виде структуры ячеек. Теперь нам необходимо превратить эти данные в удобный для обработки формат — например, в ТаблицуЗначений.
Чтобы не перебирать ячейки ТабличногоДокумента вручную в цикле, что может быть медленно и неудобно, воспользуемся мощным инструментом ПостроительЗапроса. Он позволяет создать ОписаниеИсточникаДанных на основе области ТабличногоДокумента.
Важное условие: первая строка вашего Excel-файла должна содержать заголовки колонок, которые станут именами полей в будущей таблице данных.
Реализуем процесс трансформации:
// Создаем объект ПостроительЗапроса
ПостроительЗапроса = Новый ПостроительЗапроса;
// Указываем область данных (обычно это весь лист)
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область("Лист1"));
ПостроительЗапроса.Выполнить();
// Получаем результат в виде таблицы значений
РезТаб = ПостроительЗапроса.Результат.Выгрузить();
// Теперь можно легко обходить данные
Для Каждого СтрокаТЗ из РезТаб Цикл
// Обращаемся к данным по имени колонки, которое было в первой строке Excel
Товар = СтрокаТЗ.Товар;
Цена = СтрокаТЗ.Цена;
КонецЦикла;
Если структура файла сложная (например, наличие объединенных ячеек или многоуровневых заголовков), стандартный ТабличныйДокумент может обработать их не так, как ожидается. В таких ситуациях рекомендуем рассмотреть следующие подходы:
CSV (текстовый файл с разделителями). Чтение текстовых данных через объект ТекстовыйДокумент является максимально быстрым и не зависит от версии Excel..xlsx — это по сути ZIP-архив с XML-файлами внутри, существуют специализированные внешние библиотеки (часто на основе .NET или Java), которые позволяют парсить данные без использования механизмов 1С.ПоместитьФайл. В этом случае вы можете сначала считать данные на клиенте (где Excel может быть установлен), а затем передать готовую структуру данных на сервер.При реализации любого из предложенных методов помните о необходимости валидации данных:
Попытка...Исключение при записи полученных данных в базу 1С, чтобы избежать аварийного завершения обработки при возникновении ошибок типизации.Используя объект ТабличныйДокумент и ПостроительЗапроса, вы получаете универсальный инструмент, который работает стабильно на любом сервере, независимо от наличия установленного офисного пакета.