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

Автоматизация · 11 мин

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

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

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

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

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

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

Способ чтения определяется окружением, в котором выполняется код. Если обработка запускается на клиентском компьютере бухгалтера, где установлен Excel, COM-объект — самый гибкий вариант. Если загрузка выполняется на сервере 1С, где Office обычно не установлен, COM-вызов просто не создастся, и остаются табличный документ или ADO.

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

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

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

Не требует Excel, работает на клиенте и сервере, читает XLSX. Минусы: медленно на больших файлах, забирает форматирование, которое обычно не нужно.

COM-объект Excel.Application

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

ADO (провайдер ACE/OLEDB)

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

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

Метод ТабличныйДокумент.Прочитать() — самый простой и самый распространённый способ. Платформа сама разбирает файл и помещает содержимое листа в табличный документ, из которого значения читаются по координатам ячеек методом Область().Текст или через свойство ТекущаяОбласть. Для xlsx-файлов это работает «из коробки» без каких-либо дополнительных компонентов.

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

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

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

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

Ограничения табличного документа

Табличный документ читает только один лист — по умолчанию активный. Если данные лежат на втором или третьем листе книги, этот способ без подготовки не сработает: файл придётся предварительно сохранить с нужным листом активным или использовать COM. Также метод не подходит для файлов в старом формате XLS на некоторых конфигурациях сервера — надёжнее работает с XLSX.

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

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

Объект создаётся конструкцией Новый COMОбъект("Excel.Application"), после чего открывается книга методом Workbooks.Open. Обязательные приёмы: установить Application.Visible = Ложь и Application.DisplayAlerts = Ложь, чтобы Excel не показывал окна и диалоги, а после чтения — закрыть книгу, вызвать Application.Quit() и обнулить переменные. Иначе в памяти останется «висеть» невидимый процесс EXCEL.EXE, который блокирует файл и со временем съедает ресурсы компьютера.

bsl
Excel = Новый COMОбъект("Excel.Application");
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 = Неопределено;

Определять последнюю строку через UsedRange или поиск снизу вверх по ключевой колонке надёжнее, чем задавать фиксированный диапазон: в реальных файлах встречаются пустые «хвосты» из отформатированных, но пустых ячеек, и UsedRange иногда возвращает завышенную границу. Поэтому в цикле всегда стоит проверка на пустую строку с пропуском или прерыванием.

Чтение через ADO

ADO подключается к файлу Excel как к источнику данных через провайдер Microsoft ACE OLEDB и позволяет читать лист SQL-подобным запросом вида SELECT * FROM [Лист1$]. Способ быстрый, не требует Excel и хорошо справляется с файлами на десятки тысяч строк, поэтому его часто выбирают для регулярных загрузок прайсов на сервере.

Главные подводные камни ADO — определение типов колонок и строка заголовков. Провайдер «угадывает» тип колонки по первым строкам: если в числовой колонке встретится текст, часть значений вернётся пустыми. Параметр HDR=YES в строке подключения указывает, что первая строка — заголовки; HDR=NO читает все строки как данные с именами полей F1, F2 и так далее. Также драйвер нужной разрядности должен быть установлен на машине, где выполняется код, и его разрядность должна совпадать с разрядностью процесса 1С.

Обработка и проверка прочитанных данных

Чтение файла — только половина задачи. Сырые значения из Excel всегда приходят как строки или числа «как есть», и перед записью в базу их нужно привести к типам 1С: строку «12 500,50» с неразрывным пробелом — к числу, «31.01.2026» — к дате, наименование товара — к ссылке на элемент справочника через поиск по коду, артикулу или наименованию.

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

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

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

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

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

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

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

Числа и суммы
Норма

Итоговая сумма по загруженной колонке равна итогу в Excel

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

Сумма расходится — проблема с разделителем дробной части или пробелами в числах

Даты
Норма

Даты соответствуют файлу и попадают в ожидаемый период

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

Даты сдвинуты или перепутаны день и месяц — различие форматов ДД.ММ.ГГГГ и ММ/ДД/ГГГГ

Ссылки на справочники
Норма

Все позиции сопоставлены существующим элементам или осознанно созданы новые

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

Часть строк без ссылок — не найдены номенклатура или контрагенты, нужна ручная разметка

Типичные ошибки и ограничения

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

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

Типичные ошибки
01
Чтение ячеек как текста без приведения типов — числа и даты записываются в базу строками или с ошибкой преобразования.
02
Неосвобождённый COM-объект Excel — в памяти накапливаются процессы EXCEL.EXE, файл остаётся заблокированным.
03
Жёстко заданное число строк вместо определения реальной границы данных — при лишних строках загружается мусор, при недостатке теряются данные.
04
Игнорирование кода листа — данные читаются с первого листа, хотя нужные лежат на другом.
05
Запись в базу без предварительного показа таблицы пользователю — ошибки в файле обнаруживаются уже после проведения документов.
06
Отсутствие транзакции при массовой записи — при сбое остаётся частично загруженный документ.
Маршрут решения

Как выбрать способ под вашу ситуацию

Excel установлен на том компьютере, где выполняется код, и нужны формулы или несколько листовИспользуйте COM-объект Excel.Application с обязательным Quit() в конце
Нужен простой способ без зависимостей, файл XLSX, один листЧитайте через ТабличныйДокумент.Прочитать со способом чтения «Значение»
Файл большой, загрузка идёт на сервере без OfficeИспользуйте ADO с провайдером ACE OLEDB подходящей разрядности
Файлы приходят регулярно и в разном видеСделайте обработку с настраиваемым сопоставлением колонок и предварительным просмотром таблицы

FAQ

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

Да. Табличный документ 1С читает XLSX собственными средствами платформы, а ADO работает через отдельный драйвер ACE OLEDB. Устанавливать Microsoft Office для этих способов не требуется.

Почему вместо значений формул читается пустота или текст формулы?

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

Как определить последнюю заполненную строку?

В табличном документе — свойство ВысотаТаблицы. В COM — поиск снизу вверх по ключевой колонке: Cells(Rows.Count, 1).End(xlUp).Row. В обоих случаях в цикле стоит пропускать пустые строки, потому что граница иногда захватывает отформатированные пустые ячейки.

ADO возвращает пустые значения в части ячеек числовой колонки. Что делать?

Провайдер определяет тип колонки по первым строкам; текстовые значения в «числовой» колонке превращаются в NULL. Решения: добавить в строку подключения параметр IMEX=1 для смешанного чтения как текста и затем приводить типы в коде, либо привести данные в самом файле к единому формату.

Где выполнять загрузку — на клиенте или на сервере?

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

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

Настройте в обработке сопоставление колонок: пользователь указывает, в какой колонке артикул, цена и наименование, а код читает по этим настройкам, а не по жёстким номерам. Дополнительно полезен поиск строки заголовка по ключевым словам вместо фиксированного номера строки.

Итог

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

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