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

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

Как читать Excel-файлы в 1С: способы, код и нюансы

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

Загрузка данных из Excel — одна из самых частых задач в 1С: прайсы поставщиков, списки номенклатуры, остатки и заявки почти всегда приходят в формате XLS или XLSX. Встроенного универсального механизма «из коробки» во всех конфигурациях нет, поэтому разработчику или внедренцу нужно выбрать подходящий способ чтения и реализовать его кодом.

Существует три рабочих подхода: чтение через COM-объект Excel, чтение через объект «ТабличныйДокумент» и использование типовых механизмов БСП (библиотеки стандартных подсистем), если конфигурация на ней построена. У каждого способа есть ограничения по платформе, скорости и форматам файлов.

Ниже разобраны все варианты с примерами кода, условиями выбора, типичными ошибками и способами проверить, что данные прочитаны корректно.

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

Выбор зависит от трёх условий: где выполняется код (клиент или сервер), какая операционная система на сервере и есть ли в конфигурации библиотека стандартных подсистем. Ошибка на этом этапе — самая частая причина того, что обработка «работает у разработчика, но не работает у клиента».

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

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

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

Работает на любой ОС и без Excel. Подходит для XLS и XLSX. Ограничение: большие файлы читаются медленно, формулы возвращаются как значения.

COM-объект Excel.Application

Даёт доступ ко всем возможностям Excel: листы, форматирование, формулы. Требует Windows и установленный Excel на машине выполнения кода.

БСП «Загрузка данных из файла»

Готовый интерфейс сопоставления колонок в типовых конфигурациях. Подходит для загрузки табличных частей и справочников без программирования.

Чтение Excel через ТабличныйДокумент

Это основной и рекомендуемый способ. Файл Excel открывается как табличный документ 1С, после чего данные читаются по координатам ячеек. Платформа сама разбирает формат XLS и XLSX, конвертеры и внешнее ПО не нужны.

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

bsl
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Данные\Прайс.xlsx", СпособЧтенияЗначенийТабличногоДокумента.Значение);

ПерваяСтрока = 2; // пропускаем шапку
ПоследняяСтрока = ТабДок.ВысотаТаблицы;
ПоследняяКолонка = ТабДок.ШиринаТаблицы;

Для НомерСтроки = ПерваяСтрока По ПоследняяСтрока Цикл
    Артикул = ТабДок.Область(НомерСтроки, 1).Текст;
    Наименование = ТабДок.Область(НомерСтроки, 2).Текст;
    ЦенаСтрокой = ТабДок.Область(НомерСтроки, 3).Текст;
    // дальше — поиск номенклатуры и запись данных
КонецЦикла;

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

Свойства ВысотаТаблицы и ШиринаТаблицы после чтения содержат фактические границы заполненной области. Не задавайте количество строк константой: реальный файл почти всегда отличается от образца, и жёсткий лимит приведёт либо к потере данных, либо к обходу пустых строк.

Чтение файла, выбранного пользователем

В управляемых формах файл сначала помещается во временное хранилище на клиенте, затем передаётся на сервер. На сервере данные из хранилища записываются во временный файл, и уже он передаётся в метод Прочитать(). После чтения временный файл следует удалить.

bsl
&НаСервере
Процедура ПрочитатьНаСервере(АдресХранилища)
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ДвоичныеДанные.Записать(ИмяФайла);
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    // обработка ТабДок...
    УдалитьФайлы(ИмяФайла);
КонецПроцедуры

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

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

bsl
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Open("C:\Данные\Прайс.xlsx");
Лист = Книга.Worksheets(1);

НомерСтроки = 2;
Пока СокрЛП(Лист.Cells(НомерСтроки, 1).Value) <> "" Цикл
    Артикул = Лист.Cells(НомерСтроки, 1).Value;
    Цена = Лист.Cells(НомерСтроки, 3).Value;
    НомерСтроки = НомерСтроки + 1;
КонецЦикла;

Книга.Close(Ложь);
Excel.Quit();
Excel = Неопределено;

Критически важно завершать процесс корректно: закрыть книгу, вызвать Quit() и обнулить переменную. Если этого не сделать, в диспетчере задач накапливаются «зависшие» процессы EXCEL.EXE, которые держат файлы и память сервера. На сервере 1С это типичная причина деградации производительности.

Загрузка данных в типовых конфигурациях через БСП

В конфигурациях на библиотеке стандартных подсистем (УТ, ERP, Бухгалтерия, ЗУП) есть готовый механизм «Загрузка данных из файла». Он открывает Excel-файл, показывает пользователю таблицу и позволяет вручную сопоставить колонки файла реквизитам объекта 1С — без единой строки кода.

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

Для разработчика БСП предоставляет программный интерфейс: модуль ЗагрузкаДанныхИзФайла и переопределяемые процедуры сопоставления. Это удобно, когда нужно встроить загрузку в свою обработку, но не писать разбор Excel с нуля.

Порядок загрузки через типовой механизм
  1. 1
    Откройте список справочника или документов и найдите команду «Загрузить из файла» в меню «Ещё»
  2. 2
    Укажите Excel-файл и дождитесь предпросмотра таблицы
  3. 3
    Сопоставьте колонки файла реквизитам 1С, отметьте ключевые поля для поиска дублей
  4. 4
    Выполните загрузку и изучите протокол: какие строки загружены, какие отклонены и почему
  5. 5
    Проверьте выборочно несколько записей в базе: значения, типы, заполненность обязательных реквизитов

Как проверить, что данные прочитаны правильно

Факт успешного выполнения кода не означает корректности данных. Excel хранит значения в собственных типах, и при чтении часто возникают расхождения: числа приходят строками, даты — числами в формате OLE, артикулы с ведущими нулями теряют нули.

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

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

Как проверить результат чтения

Числа и цены
Норма

Значение имеет тип Число, разрядность совпадает с файлом

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

Число пришло строкой с пробелами или разделителем — нужна очистка и преобразование

Даты
Норма

Значение типа Дата с корректным годом и числом

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

Дата пришла числом вида 45000 — это серийный номер даты Excel, требуется пересчёт

Артикулы и коды
Норма

Ведущие нули и длина кода сохранены

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

«00123» превратился в 123 — колонку нужно читать как текст

Количество строк
Норма

Число обработанных строк совпадает с заполненными строками файла

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

Строк больше или меньше — проверьте шапку, итоговые строки и скрытые строки в файле

Типичные ошибки и их решение

Большинство проблем при чтении Excel в 1С повторяются от проекта к проекту. Знание типовых сценариев экономит часы отладки.

Типичные ошибки
01
Ошибка «Ошибка при вызове конструктора COMОбъект» — Excel не установлен на машине, где выполняется код, либо код выполняется на Linux-сервере. Решение: перейти на ТабличныйДокумент.
02
Чтение только первого листа — метод Прочитать() табличного документа читает активный лист; данные на других листах теряются. Решение: договориться о формате файла или использовать COM для перебора листов.
03
Потеря ведущих нулей в кодах и артикулах — Excel хранит значение как число. Решение: в файле форматировать колонку как текст или дополнять код нулями при загрузке.
04
Зависшие процессы EXCEL.EXE на сервере — не вызван Quit() или исключение прервало код до закрытия. Решение: оборачивать работу в Попытка/Исключение с гарантированным закрытием.
05
Медленное чтение больших файлов — десятки тысяч строк через COM или построчное обращение к областям. Решение: читать через ТабличныйДокумент и минимизировать обращения к ячейкам.

Отдельная проблема — объединённые ячейки в шапках прайсов. При чтении через ТабличныйДокумент значение объединённой области находится только в левой верхней ячейке, остальные пусты. Если файл формирует поставщик, проще договориться о «плоской» структуре: одна строка заголовков, дальше только данные.

Производительность и большие файлы

Файлы на десятки тысяч строк требуют отдельного подхода. Чтение через ТабличныйДокумент загружает весь файл в память целиком — при очень больших объёмах это может привести к нехватке памяти на сервере. COM-чтение ячеек по одной работает медленно из-за накладных расходов на каждый вызов.

Практические приёмы ускорения: читать данные блоками, отключать обновление экрана у Excel (ScreenUpdating = Ложь), а при загрузке в базу записывать объекты пакетами с транзакциями разумного размера, а не по одной записи. Для регулярных загрузок больших объёмов имеет смысл договориться с контрагентом о формате CSV — он читается построчно текстовым чтением и не требует загрузки файла целиком.

Если файл формирует сторонняя система или поставщик, зафиксируйте шаблон: порядок колонок, формат дат, отсутствие объединённых ячеек и формул. Большинство «нестабильных» загрузок на практике ломаются не из-за кода 1С, а из-за того, что человек вручную поправил файл перед отправкой.
ПЗ
Практическое замечание

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

Можно ли читать Excel в 1С без установленного Excel?

Да. Чтение через объект ТабличныйДокумент методом Прочитать() не требует установленного Microsoft Excel и работает на любой операционной системе, включая Linux-серверы. Форматы XLS и XLSX платформа разбирает самостоятельно.

Почему даты из Excel приходят числами?

Excel хранит даты как количество дней от базовой даты. Если ячейка не распознана как дата, 1С получает это число. Решение — проверять тип значения и при необходимости пересчитывать: Дата = Дата(1899,12,30) + ЧислоИзExcel * 86400.

Как прочитать конкретный лист книги Excel?

Через ТабличныйДокумент доступен только один лист. Для выбора листа по имени или номеру используйте COM-объект: Книга.Worksheets(ИмяЛиста). Альтернатива — сохранять нужный лист в отдельный файл перед загрузкой.

Что делать, если файл занят другой программой?

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

Как загрузить Excel в 1С вообще без программирования?

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

Почему обработка работает на тестовом файле, но падает на реальном?

Реальные файлы содержат пустые строки, объединённые ячейки, итоговые строки, скрытые колонки и текст в числовых полях. Добавьте в код проверки: пропуск пустых строк, оборачивание преобразований типов в Попытка/Исключение и журналирование проблемных строк с их номерами.

Итог

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

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