К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как в 1С прочитать данные из файла Excel

Как в 1С прочитать файл Excel: чтение через табличный документ, COM-объект Excel.Application и внешние компоненты. Примеры кода, ошибки, FAQ.

Загрузка данных из Excel — одна из самых частых задач в 1С: прайсы поставщиков, остатки, списки контрагентов и номенклатуры почти всегда приходят именно в формате XLS или XLSX. Встроенные механизмы платформы позволяют прочитать такой файл без установленного Microsoft Office, а при необходимости — работать с книгой напрямую через COM-объект. Выбор способа зависит от версии платформы, режима работы (тонкий клиент, веб-клиент, сервер) и требований к скорости.

Основных подхода три: чтение файла в объект «Табличный документ» с последующим обходом ячеек, подключение к Excel через COM-объект Excel.Application и использование специализированных внешних компонент или готовых обработок. Первый способ универсален и работает даже на сервере без Office, второй даёт доступ к формулам, листам и форматированию, третий оправдан при больших объёмах.

Ниже разобраны все три сценария с примерами кода на встроенном языке 1С, типичными ошибками и способами проверки результата. Примеры применимы к платформе 8.3 в управляемых формах; для обычных форм отличия минимальны.

Выбор способа чтения: что учесть до написания кода

Прежде чем писать код, определите три вещи: где будет выполняться чтение (клиент или сервер), установлен ли на этой машине Microsoft Excel и какой объём данных нужно обработать. От ответов зависит и архитектура решения, и его надёжность.

Чтение через табличный документ — единственный вариант, который работает на сервере 1С без дополнительного ПО, в веб-клиенте и на Linux. COM-подключение требует установленного Excel и прав на создание COM-объектов, поэтому на 64-разрядном сервере оно часто недоступно или нестабильно. Для файлов на сотни тысяч строк оба способа медленные — там имеет смысл конвертировать файл в CSV или использовать внешние компоненты.

Сравнение способов чтения Excel

ТабличныйДокумент.Прочитать()

Работает везде, включая сервер и веб-клиент, не требует Office. Ограничение: читается только активный лист, формулы возвращаются как вычисленные значения.

COM Excel.Application

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

Конвертация в CSV

Максимальная скорость на больших объёмах. Ограничение: теряются типы данных, один лист на файл, нужна предварительная конвертация.

Чтение файла через табличный документ

Объект «Табличный документ» умеет открывать файлы форматов XLS, XLSX и ODS напрямую. После чтения содержимое листа становится доступно построчно через область ячеек. Это рекомендуемый способ по умолчанию: он не требует внешних зависимостей и одинаково работает на клиенте и на сервере.

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

ТабДок = Новый ТабличныйДокумент;

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

Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл

Наименование = ТабДок.Область("R" + НомерСтроки + "C1").Текст;

ЦенаСтрокой = ТабДок.Область("R" + НомерСтроки + "C2").Текст;

// дальше — преобразование типов и запись в базу

КонецЦикла;

Обратите внимание на способ чтения: СпособЧтенияЗначенийТабличногоДокумента.Значение возвращает вычисленные значения, а вариант «Текст» — отображаемое представление. Для загрузки чисел и дат надёжнее режим «Значение», иначе число с разделителями разрядов можно получить как строку с пробелами.

Доступ к ячейке через Область("R{Cтрока}C{Колонка}") — медленная операция при десятках тысяч обращений. Если файл большой, читайте данные в цикле с минимумом лишних обращений и отключите отображение табличного документа на форме до окончания загрузки.

Порядок чтения через табличный документ
  1. 1
    Поместите файл во временное хранилище или передайте путь на сервере
  2. 2
    Создайте объект ТабличныйДокумент и вызовите Прочитать() с режимом «Значение»
  3. 3
    Определите границы: ВысотаТаблицы и ШиринаТаблицы
  4. 4
    Пройдите циклом по строкам, пропустив строку заголовков
  5. 5
    Преобразуйте строковые значения в числа и даты с проверкой
  6. 6
    Запишите данные в базу в одной транзакции

Чтение через COM-объект Excel.Application

COM-подключение даёт полный контроль над книгой: можно выбрать конкретный лист по имени, прочитать формулы, узнать реальные границы UsedRange, обработать несколько листов за один запуск. Расплачиваться за это приходится требованием установленного Excel и потенциальной нестабильностью.

Типовой код подключения выглядит так. Обязательно оберните его в попытку/исключение и гарантированно завершайте процесс Excel в конце — иначе в системе останутся «висеть» невидимые экземпляры EXCEL.EXE, которые со временем исчерпают память сервера.

Попытка

Excel = Новый COMОбъект("Excel.Application");

Исключение

Сообщить("Excel не установлен или COM недоступен: " + ОписаниеОшибки());

Возврат;

КонецПопытки;

Excel.Visible = Ложь;

Excel.DisplayAlerts = Ложь;

Книга = Excel.Workbooks.Open(ИмяФайла);

Лист = Книга.Worksheets(1);

ПоследняяСтрока = Лист.Cells(Лист.Rows.Count, 1).End(-4162).Row; // xlUp

Для Стр = 2 По ПоследняяСтрока Цикл

Значение = Лист.Cells(Стр, 1).Value;

КонецЦикла;

Книга.Close(Ложь);

Excel.Quit();

Excel = Неопределено;

Константа -4162 — это xlUp, числовой эквивалент встроенной константы Excel, поскольку через COM из 1С именованные константы недоступны. Поиск последней строки снизу вверх надёжнее, чем UsedRange: UsedRange может включать ранее отформатированные, но уже пустые строки.

Проверка и преобразование данных после чтения

Всё, что прочитано из Excel, по умолчанию недоверчиво: ячейка с «числом» может содержать текст, дата может быть строкой в произвольном формате, а вместо суммы — формула с ошибкой. Загрузка таких данных напрямую в справочники и документы приводит к дублям и битым ссылкам.

Минимальный набор проверок: строка не пустая, число преобразуется функцией Число() без исключения (предварительно убрав неразрывные пробелы и заменив запятую на точку при необходимости), дата распознаётся функцией Дата() или разбирается вручную. Для ссылочных полей — номенклатуры, контрагентов — сначала выполняйте поиск в базе и только при успехе пишите строку документа.

Полезный приём — загрузка в два прохода: сначала весь файл читается в таблицу значений с валидацией, пользователю показывается список ошибок с номерами строк Excel, и только после подтверждения данные записываются в базу. Это избавляет от частично загруженных документов, которые потом приходится искать и удалять вручную.

Контрольные точки

Как проверить результат загрузки

Количество загруженных строк
Норма

Совпадает с числом заполненных строк в файле минус заголовок

Тревожный признак

Строк меньше — часть отсеялась молча; больше — прочитаны пустые «хвосты» UsedRange

Числовые поля
Норма

Суммы и количества в 1С сходятся с итогами в Excel

Тревожный признак

Расхождения на строки с разделителями разрядов или текстом вместо числа

Даты
Норма

Даты соответствуют исходным, год корректный

Тревожный признак

Даты «перевернулись» (день и месяц поменялись местами) на файлах с американским форматом

Типичные ошибки и их устранение

Самая частая жалоба — «файл не открывается». При работе на сервере причина почти всегда в том, что путь к файлу указывает на диск клиентской машины, недоступный серверу. Решение — передача файла через временное хранилище (ПоместитьВоВременноеХранилище) и извлечение его на сервере во временный файл.

Вторая группа ошибок — кодировка и формат. Файл с расширением XLSX, сохранённый сторонней программой с нарушениями стандарта, может не открыться табличным документом, хотя Excel его читает. В таком случае пересохраните файл в Excel или запросите у отправителя корректный файл. Формат XLSB (двоичная книга) табличный документ не читает вовсе — его нужно пересохранить в XLSX.

Третья группа — производительность. Построчное чтение через COM с обращением Cells(Стр, Кол).Value внутри двойного цикла на большом файле занимает минуты, потому что каждое обращение — отдельный COM-вызов. Ускорить можно чтением диапазона в массив одним обращением (Range.Value возвращает двумерный массив) или переходом на табличный документ.

Типичные ошибки при чтении Excel в 1С
01
Чтение файла по локальному пути в серверном вызове — сервер не видит диск пользователя; передавайте файл через временное хранилище
02
Отсутствие Excel.Quit() и обнуления COM-объекта — накапливаются зависшие процессы EXCEL.EXE
03
Запись в базу без предварительной валидации — в справочниках появляются дубли и пустые элементы
04
Игнорирование строки заголовков — первая строка файла попадает в данные
05
Использование UsedRange как границы данных — захватываются ранее отформатированные пустые строки

Альтернативы: внешние компоненты и готовые обработки

Если штатные средства не справляются по скорости или функциональности, существуют внешние компоненты для чтения Excel, работающие без установленного Office и заметно быстрее перебора ячеек. Их подключают к конфигурации как внешние компоненты по технологии Native API или COM. Перед внедрением проверьте поддержку вашей разрядности платформы и лицензионные условия конкретной компоненты.

Для разовых загрузок часто достаточно готовых универсальных обработок загрузки из табличного документа, которые входят в состав типовых конфигураций или распространяются отдельно. Они позволяют настроить соответствие колонок файла реквизитам объектов без программирования. Это разумный выбор, когда задача — периодическая загрузка прайсов силами пользователя, а не разработка собственного механизма.

Наконец, простейший обходной путь для больших объёмов — сохранить лист в CSV и прочитать его как текстовый файл построчно. Скорость чтения текста на порядки выше, а потеря форматирования для обмена данными обычно несущественна. Минус — один лист на файл и необходимость договориться с отправителем о формате и разделителе.

Маршрут решения

Как выбрать способ чтения

Файл нужно прочитать на сервере или в веб-клиентеИспользуйте ТабличныйДокумент.Прочитать() — другие способы там недоступны
Нужны несколько листов, формулы или форматирование, и Excel установленИспользуйте COM Excel.Application с обязательным завершением процесса
Файл содержит сотни тысяч строкКонвертируйте в CSV или используйте внешнюю компоненту чтения
Загрузку выполняет пользователь без программистаВозьмите готовую обработку загрузки из табличного документа

Частые вопросы о чтении Excel в 1С

Можно ли прочитать XLSX без установленного Excel?

Да. Метод ТабличныйДокумент.Прочитать() открывает XLS, XLSX и ODS собственными средствами платформы, Office для этого не нужен. Ограничение — читается первый (активный) лист и только вычисленные значения, без доступа к формулам.

Почему табличный документ прочитал только один лист из нескольких?

Это штатное поведение: при чтении файла Excel в табличный документ загружается один лист. Если нужны остальные, используйте COM-подключение с перебором Worksheets либо сохраните каждый лист отдельным файлом.

Числа из Excel загружаются как текст. Что делать?

Причина обычно в неразрывных пробелах-разделителях разрядов или региональных настройках. Уберите из строки символы пробелов (включая неразрывный, код 160), приведите разделитель дробной части к точке или запятой в соответствии с ожиданиями функции Число(), и только потом преобразовывайте.

Как прочитать Excel в фоновом задании на сервере?

Только через табличный документ: передайте файл в фоновое задание через временное хранилище или параметром в виде двоичных данных, сохраните во временный файл на сервере и вызовите Прочитать(). COM-объекты в фоновых заданиях использовать не рекомендуется из-за риска зависших процессов.

Файл XLSB не открывается. Это исправимо?

Двоичный формат XLSB платформа не читает. Откройте файл в Excel и пересохраните его как XLSX, после чего оба способа чтения заработают. Если файлы приходят регулярно, договоритесь с отправителем о смене формата.

Как защититься от загрузки дублей в справочники?

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

Итог

Что важно запомнить

Универсальный способ прочитать Excel в 1С — ТабличныйДокумент.Прочитать(): он работает без Office, на клиенте и на сервере. COM Excel.Application даёт больше возможностей, но требует установленного Excel и аккуратного завершения процесса. Любые прочитанные данные валидируйте и преобразовывайте типы до записи в базу, а большие объёмы выносите в CSV или внешние компоненты.