Автоматизация · 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. Минусы: медленно на больших файлах, забирает форматирование, которое обычно не нужно.
Полный контроль: листы, формулы, скрытые строки, диапазоны. Минус: требует установленного Excel там, где выполняется код, и аккуратного освобождения процесса.
Быстро читает данные как таблицу, подходит для больших файлов без Excel. Минус: требует установленного драйвера, чувствителен к смешанным типам данных в колонке.
Чтение через табличный документ
Метод ТабличныйДокумент.Прочитать() — самый простой и самый распространённый способ. Платформа сама разбирает файл и помещает содержимое листа в табличный документ, из которого значения читаются по координатам ячеек методом Область().Текст или через свойство ТекущаяОбласть. Для xlsx-файлов это работает «из коробки» без каких-либо дополнительных компонентов.
Типовой порядок действий: создать объект ТабличныйДокумент, вызвать Прочитать с указанием пути к файлу, определить последнюю заполненную строку через ВысотаТаблицы и пройти циклом по строкам, начиная со строки после заголовка. Каждую ячейку читают как ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст, затем значение приводят к нужному типу — числу, дате или ссылке на справочник.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ВсегоСтрок = ТабДок.ВысотаТаблицы;
Для НомерСтроки = 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, который блокирует файл и со временем съедает ресурсы компьютера.
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 у пользователя. Третья группа — данные: числа как текст, даты в американском формате, лишние пробелы в ключевых полях, из-за которых поиск по наименованию не находит элементы справочника.
Как выбрать способ под вашу ситуацию
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. Всегда приводите типы, проверяйте итоги по количеству строк и суммам, показывайте данные пользователю до записи и выполняйте массовую запись в транзакции.