Разработка и Конфигурация · 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. Ограничение: большие файлы читаются медленно, формулы возвращаются как значения.
Даёт доступ ко всем возможностям Excel: листы, форматирование, формулы. Требует Windows и установленный Excel на машине выполнения кода.
Готовый интерфейс сопоставления колонок в типовых конфигурациях. Подходит для загрузки табличных частей и справочников без программирования.
Чтение Excel через ТабличныйДокумент
Это основной и рекомендуемый способ. Файл Excel открывается как табличный документ 1С, после чего данные читаются по координатам ячеек. Платформа сама разбирает формат XLS и XLSX, конвертеры и внешнее ПО не нужны.
Базовый порядок: создать объект ТабличныйДокумент, вызвать метод Прочитать() с указанием пути к файлу и способа чтения, затем определить границы данных и обойти строки в цикле.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Данные\Прайс.xlsx", СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПерваяСтрока = 2; // пропускаем шапку
ПоследняяСтрока = ТабДок.ВысотаТаблицы;
ПоследняяКолонка = ТабДок.ШиринаТаблицы;
Для НомерСтроки = ПерваяСтрока По ПоследняяСтрока Цикл
Артикул = ТабДок.Область(НомерСтроки, 1).Текст;
Наименование = ТабДок.Область(НомерСтроки, 2).Текст;
ЦенаСтрокой = ТабДок.Область(НомерСтроки, 3).Текст;
// дальше — поиск номенклатуры и запись данных
КонецЦикла;Обратите внимание на параметр СпособЧтенияЗначенийТабличногоДокумента.Значение — он возвращает вычисленные значения ячеек вместо формул. Если файл содержит формулы, а нужен именно результат расчёта, этот параметр обязателен.
Свойства ВысотаТаблицы и ШиринаТаблицы после чтения содержат фактические границы заполненной области. Не задавайте количество строк константой: реальный файл почти всегда отличается от образца, и жёсткий лимит приведёт либо к потере данных, либо к обходу пустых строк.
Чтение файла, выбранного пользователем
В управляемых формах файл сначала помещается во временное хранилище на клиенте, затем передаётся на сервер. На сервере данные из хранилища записываются во временный файл, и уже он передаётся в метод Прочитать(). После чтения временный файл следует удалить.
&НаСервере
Процедура ПрочитатьНаСервере(АдресХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные.Записать(ИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// обработка ТабДок...
УдалитьФайлы(ИмяФайла);
КонецПроцедурыЧтение Excel через COM-объект
COM-подключение используется, когда нужны возможности самого Excel: перебор листов по именам, чтение скрытых ячеек, работа с форматированием или со старыми файлами, которые платформа читает некорректно. Код создаёт объект Excel.Application, открывает книгу и обращается к ячейкам через коллекцию Cells.
Попытка
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Откройте список справочника или документов и найдите команду «Загрузить из файла» в меню «Ещё»
- 2Укажите Excel-файл и дождитесь предпросмотра таблицы
- 3Сопоставьте колонки файла реквизитам 1С, отметьте ключевые поля для поиска дублей
- 4Выполните загрузку и изучите протокол: какие строки загружены, какие отклонены и почему
- 5Проверьте выборочно несколько записей в базе: значения, типы, заполненность обязательных реквизитов
Как проверить, что данные прочитаны правильно
Факт успешного выполнения кода не означает корректности данных. Excel хранит значения в собственных типах, и при чтении часто возникают расхождения: числа приходят строками, даты — числами в формате OLE, артикулы с ведущими нулями теряют нули.
Минимальный контроль: вывести первые несколько строк в сообщение или таблицу значений и сравнить с исходным файлом. Проверяйте тип каждого значения через ТипЗнч() и приводите к нужному типу явно — Строка(), Число(), Дата() — с обработкой исключений, потому что в ячейке может оказаться текст вместо числа.
Как проверить результат чтения
Значение имеет тип Число, разрядность совпадает с файлом
Число пришло строкой с пробелами или разделителем — нужна очистка и преобразование
Значение типа Дата с корректным годом и числом
Дата пришла числом вида 45000 — это серийный номер даты Excel, требуется пересчёт
Ведущие нули и длина кода сохранены
«00123» превратился в 123 — колонку нужно читать как текст
Число обработанных строк совпадает с заполненными строками файла
Строк больше или меньше — проверьте шапку, итоговые строки и скрытые строки в файле
Типичные ошибки и их решение
Большинство проблем при чтении Excel в 1С повторяются от проекта к проекту. Знание типовых сценариев экономит часы отладки.
Отдельная проблема — объединённые ячейки в шапках прайсов. При чтении через ТабличныйДокумент значение объединённой области находится только в левой верхней ячейке, остальные пусты. Если файл формирует поставщик, проще договориться о «плоской» структуре: одна строка заголовков, дальше только данные.
Производительность и большие файлы
Файлы на десятки тысяч строк требуют отдельного подхода. Чтение через ТабличныйДокумент загружает весь файл в память целиком — при очень больших объёмах это может привести к нехватке памяти на сервере. 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. В типовых конфигурациях сначала проверьте штатную загрузку из файла. Всегда контролируйте типы данных, количество строк и делайте пробный прогон перед записью в рабочую базу.