Разработка и Конфигурация · 12 мин
Как в 1С загрузить файл Excel в табличный документ
Пошаговая инструкция: как в 1С загрузить файл Excel в табличный документ через COM-объект, метод Прочитать и типовые обработки. Примеры кода и разбор ошибок.
Загрузка данных из Excel — одна из самых частых задач при работе с 1С: прайсы поставщиков, номенклатура, остатки, заявки почти всегда приходят в формате XLS или XLSX. Платформа 1С:Предприятие позволяет прочитать такой файл напрямую в табличный документ — объект, который уже умеет отображать данные, сохраняться и передаваться в дальнейшую обработку.
Существует три рабочих подхода: чтение файла методом ТабличныйДокумент.Прочитать(), построчный обход через COM-объект Excel.Application и использование типовых обработок загрузки в конфигурациях. Выбор зависит от того, где выполняется код (клиент или сервер), установлен ли Excel на компьютере и насколько сложная структура у файла.
Ниже разобраны все три способа с примерами кода, условиями применения, проверкой результата и типичными ошибками, из-за которых загрузка завершается пустым документом или падением сеанса.
Какой способ загрузки выбрать
Прежде чем писать код, определите три условия: где будет выполняться загрузка (тонкий клиент, толстый клиент, сервер), есть ли на этой машине установленный Microsoft Excel и нужно ли просто показать файл пользователю или сразу перенести данные в справочники и документы.
Метод Прочитать() работает на платформе без дополнительного ПО и подходит в большинстве случаев. COM-подключение к Excel даёт полный контроль над книгой (листы, формулы, скрытые строки), но требует установленного Office и прав на создание COM-объектов. Типовые обработки — вариант для пользователей без программирования.
Сравнение способов загрузки
Не требует Excel, работает на сервере и клиенте. Ограничение: читает только первый лист и не даёт доступа к формулам и настройкам книги.
Полный доступ ко всем листам, диапазонам и форматам. Ограничение: нужен установленный Excel, не работает в веб-клиенте и часто недоступен на сервере.
Готовый интерфейс сопоставления колонок для пользователя. Ограничение: есть не во всех конфигурациях, гибкость ниже, чем у собственного кода.
Загрузка методом ТабличныйДокумент.Прочитать()
Самый быстрый способ — встроенный метод платформы. Он читает файлы XLS, XLSX, MXL, а также ODS, и заполняет табличный документ содержимым первого листа книги. Никаких внешних компонентов не требуется.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Данные\Прайс.xlsx", СпособЧтенияЗначенийТабличногоДокумента.Значение);
Для Строка = 2 По ТабДок.ВысотаТаблицы Цикл
Наименование = ТабДок.Область(Строка, 1).Текст;
Цена = ТабДок.Область(Строка, 3).Текст;
// дальнейшая обработка строки
КонецЦикла;Обратите внимание на параметр СпособЧтенияЗначенийТабличногоДокумента. Значение Значение подставляет в ячейки уже вычисленные результаты формул, а Текст переносит отображаемое представление. Для числовых колонок, которые дальше преобразуются через Число(), предпочтительнее режим «Значение» — так меньше проблем с разделителями и пробелами.
После чтения данные доступны через коллекцию областей: ТабДок.Область(НомерСтроки, НомерКолонки).Текст. Размеры заполненной части возвращают свойства ВысотаТаблицы и ШиринаТаблицы — по ним строят цикл обхода. Если документ нужно просто показать пользователю, достаточно привязать его к элементу формы «Поле табличного документа».
Чтение через COM-объект Excel.Application
Когда нужно прочитать конкретный лист, обойти скрытые строки или файл не открывается методом Прочитать() корректно, используют прямое подключение к Excel через COM. Этот способ работает только там, где установлен Microsoft Excel: на толстом клиенте или на сервере с развёрнутым Office.
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Excel не установлен: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Open("C:\Данные\Прайс.xlsx");
Лист = Книга.Worksheets(1);
ТабДок = Новый ТабличныйДокумент;
ПоследняяСтрока = Лист.UsedRange.Rows.Count;
Для Строка = 2 По ПоследняяСтрока Цикл
ТабДок.Область(Строка, 1).Текст = Строка(Лист.Cells(Строка, 1).Value);
КонецЦикла;
Книга.Close(0);
Excel.Quit();
Excel = Неопределено;Критически важно корректно завершать работу: закрыть книгу, вызвать Quit() и обнулить переменную. Иначе процесс EXCEL.EXE остаётся висеть в памяти, и после нескольких загрузок сервер или клиентский компьютер начинает тормозить, а повторное открытие файла блокируется.
Свойство DisplayAlerts = Ложь подавляет диалоги Excel о сохранении и совместимости форматов — без этого код может «зависнуть», ожидая нажатия кнопки в невидимом окне. На сервере такие диалоги особенно опасны, потому что их никто не увидит.
Загрузка через типовые обработки
Во многих конфигурациях (Управление торговлей, Комплексная автоматизация, ERP, Бухгалтерия с подсистемой обмена данными) есть встроенная обработка «Загрузка данных из табличного документа» или «Загрузка данных из файла». Она открывает Excel-файл в табличный документ, позволяет пользователю сопоставить колонки реквизитам и переносит данные в справочники или табличные части.
Для бухгалтерских конфигураций характерен другой путь: файл открывается через «Файл → Открыть» прямо в клиенте 1С — платформа сама распознаёт XLSX и показывает содержимое как табличный документ. Оттуда данные копируют в обработку загрузки или в табличную часть документа через буфер обмена.
Типовой маршрут предпочтителен, когда загрузку выполняет пользователь без навыков программирования и формат файла относительно стабилен. Если же структура файла от поставщика меняется от раза к разу, надёжнее собственная обработка с явной логикой разбора.
Проверка результата после загрузки
То, что метод выполнился без исключения, ещё не значит, что данные загружены правильно. Типичная ситуация: табличный документ заполнен, но числа пришли как текст с неразрывными пробелами, даты — в американском формате, а часть строк пустая из-за объединённых ячеек в шапке.
Как проверить результат
Значение соответствует числу строк в исходном файле
0 или 1 строка — файл не прочитался, неверный формат или пустой первый лист
Текст ячейки преобразуется функцией Число() без ошибки
Числа с пробелами-разделителями или в текстовом формате Excel — требуется очистка строки
Дата распознаётся или парсится из строки ДД.ММ.ГГГГ
Даты пришли как числа вида 45000 — это внутреннее представление даты Excel, нужно преобразование
Текст читается без замен символов
Крякозябры — файл на самом деле CSV с другой кодировкой, а не настоящий XLSX
Отдельно проверьте первую строку: часто это заголовки колонок, и обход данных нужно начинать со второй. Признак — в первой строке текстовые названия вместо значений. Надёжнее не жёстко пропускать строку, а определять заголовок по содержимому.
Типичные ошибки и их причины
Отдельного внимания заслуживают файлы, полученные из сторонних систем: часто под расширением XLS скрывается HTML-таблица или CSV. Метод Прочитать() такие файлы либо не откроет, либо прочитает с ошибками. Проверить можно, открыв файл в блокноте: если виден читаемый текст или разметка вместо бинарных данных — это не настоящий Excel.
Если загрузка из Excel выполняется регулярно и файл приходит от одного и того же контрагента, договоритесь о выгрузке в CSV или XLSX со стабильной структурой и зафиксируйте номера колонок в коде через константы. Это снимает большинство проблем с форматами, объединёнными ячейками и «плавающими» шапками.
Ограничения и безопасная работа с данными
Загрузка в табличный документ сама по себе не меняет данные базы — риск появляется на следующем шаге, когда содержимое переносится в справочники и документы. Перед записью выполняйте поиск существующих элементов по ключевым полям (код, артикул, ИНН), чтобы не создавать дубли, и обрабатывайте данные в транзакции, чтобы при ошибке на середине файла база не осталась в полузаполненном состоянии.
Файлы из внешних источников могут содержать макросы. Метод Прочитать() платформы макросы не выполняет, а вот открытие книги через COM с настройками Excel по умолчанию — потенциально опасно. Не понижайте уровень безопасности макросов ради загрузки и не открывайте через COM файлы из недоверенных источников.
Перед первой промышленной загрузкой сделайте резервную копию базы или отработайте на копии. Для файлов большого объёма заранее оцените время выполнения и выводите индикатор прогресса — пользователь, не видящий реакции системы, часто прерывает операцию, что для COM-сценария означает зависший процесс Excel.
Что важно запомнить
Для большинства задач достаточно ТабличныйДокумент.Прочитать() — он не требует Excel и работает везде. COM-подключение нужно для сложных файлов и требует установленного Office и обязательного освобождения объекта. После загрузки всегда проверяйте типы данных, а перед записью в базу — защищайтесь от дублей и используйте транзакции.
Частые вопросы
Можно ли загрузить Excel в 1С без установленного Microsoft Office?
Да. Метод ТабличныйДокумент.Прочитать() встроен в платформу и читает форматы XLS и XLSX самостоятельно, без Office. Ограничение — читается только первый лист книги и нет доступа к настройкам Excel. Без установленного Office не работает только вариант с COM-объектом Excel.Application.
Почему после чтения табличный документ пустой?
Наиболее частые причины: данные находятся не на первом листе книги, файл фактически является CSV или HTML с расширением XLS, либо указан неверный путь к файлу. Проверьте свойство ВысотаТаблицы сразу после чтения и откройте файл в Excel, чтобы убедиться, где расположены данные.
Как прочитать не первый, а нужный лист книги Excel?
Метод Прочитать() читает только первый лист. Для выбора листа используйте COM-объект: откройте книгу через Excel.Workbooks.Open и обратитесь к нужному листу по индексу или имени — Книга.Worksheets(\"Лист2\"). Альтернатива без COM — попросить поставщика файла размещать данные на первом листе.
Числа из Excel загружаются как текст с пробелами. Что делать?
Excel часто хранит числа с неразрывными пробелами-разделителями разрядов. Перед преобразованием очищайте строку: удалите пробелы и неразрывные пробелы через СтрЗаменить, затем применяйте Число(). Для надёжности оборачивайте преобразование в Попытка/Исключение и логируйте строки, которые не удалось распознать.
Можно ли выполнять загрузку на сервере 1С?
Через ТабличныйДокумент.Прочитать() — да, это штатный сценарий: файл передаётся на сервер во временное хранилище и читается серверным кодом. COM-вариант на сервере возможен только если на сервере установлен Excel и учётная запись агента имеет права на создание COM-объектов, но такая схема считается рискованной из-за зависших процессов и обычно не рекомендуется.
Как загрузить очень большой файл, если Прочитать() работает медленно?
Табличный документ хранит форматирование каждой ячейки, поэтому на файлах с десятками тысяч строк расход памяти и время растут заметно. Варианты: попросить источник данных в формате CSV и читать его построчно через ЧтениеТекста, разбить файл на части или читать через COM порциями строк. Для разового переноса иногда проще сохранить лист из Excel в CSV вручную.