Разработка и Конфигурация · 12 мин
Как в 1С прочитать файл Excel как табличный документ
Как в 1С прочитать файл Excel через табличный документ: метод Прочитать, построитель запроса, типовые ошибки и проверка результата загрузки данных.
Загрузка данных из Excel — одна из самых частых задач при работе с 1С: прайсы поставщиков, списки номенклатуры, остатки, заявки. Платформа «1С:Предприятие» умеет открывать файлы Excel напрямую через объект «ТабличныйДокумент» и его метод Прочитать(), без установки COM-соединения и без Excel на компьютере. Это самый простой и надежный способ получить содержимое листа в виде ячеек, с которыми можно работать привычными средствами встроенного языка.
Подход с табличным документом подходит, когда нужно разобрать файл построчно: пройти по строкам, прочитать значения колонок, проверить данные и создать на их основе объекты базы — элементы справочников, документы, записи регистров. Метод универсален: один и тот же код работает и на клиенте, и на сервере, если учесть ограничения передачи файла между ними.
Ниже разобран полный цикл: подготовка файла, чтение через ТабличныйДокумент.Прочитать(), обход строк и колонок, обработка типов данных, типовые ошибки и альтернативные способы загрузки, когда табличного документа недостаточно.
Как работает чтение Excel через табличный документ
Объект «ТабличныйДокумент» в 1С — это универсальное представление таблицы: ячейки, области, форматирование. Платформа умеет загружать в него файлы форматов xlsx, xls, mxl, ods и некоторых других. При чтении Excel содержимое листа превращается в ячейки табличного документа, где каждая ячейка хранит текст и, при соответствующем способе чтения, типизированное значение.
Метод Прочитать() принимает два ключевых параметра: путь к файлу и способ чтения значений. Способ СпособЧтенияЗначенийТабличногоДокумента.Значение пытается интерпретировать содержимое ячеек как типизированные значения (числа, даты, булево), а СпособЧтенияЗначенийТабличногоДокумента.Текст возвращает всё как строки. Для загрузки данных в базу обычно удобнее первый вариант, но если в файле смешанные форматы, текстовое чтение с последующим ручным преобразованием даёт больше контроля.
Важно понимать ограничение: читается только один лист за раз. По умолчанию загружается первый лист книги; если данные лежат на другом листе, потребуется дополнительная обработка — например, предварительное сохранение нужного листа отдельным файлом или использование построителя отчёта по табличному документу с указанием области.
Минимальный код: читаем файл в несколько строк
Базовый пример чтения файла на сервере выглядит так:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Загрузка\Прайс.xlsx",
СпособЧтенияЗначенийТабличногоДокумента.Значение);
ВсегоСтрок = ТабДок.ВысотаТаблицы;
ВсегоКолонок = ТабДок.ШиринаТаблицы;
Для НомСтроки = 2 По ВсегоСтрок Цикл // первая строка — шапка
Артикул = ТабДок.Область(НомСтроки, 1).Текст;
Наименование = ТабДок.Область(НомСтроки, 2).Текст;
Цена = ТабДок.Область(НомСтроки, 3).Значение;
// дальше — поиск или создание номенклатуры
КонецЦикла;
Обращение к ячейке выполняется через Область(НомерСтроки, НомерКолонки). Свойство Текст всегда возвращает строковое представление, свойство Значение — типизированное значение, если способ чтения был «Значение» и платформа смогла распознать тип. Размеры заполненной области дают свойства ВысотаТаблицы и ШиринаТаблицы.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Для Стр = 2 По ТабДок.ВысотаТаблицы Цикл
ЗначениеЯчейки = ТабДок.Область(Стр, 1).Значение;
КонецЦикла;Если код выполняется в клиент-серверном режиме, файл сначала нужно передать на сервер. Для этого используют НачатьПомещениеФайла() или НачатьПомещениеФайлаНаСервер() в тонком клиенте, а на сервере сохраняют двоичные данные во временный файл через ПолучитьИмяВременногоФайла("xlsx") и читают уже его. Читать файл напрямую с диска клиента серверный код не может.
Как обойти строки и распознать типы данных
Реальные файлы редко бывают идеальными: встречаются пустые строки, объединённые ячейки, промежуточные итоги, шапки из нескольких строк. Поэтому обход стоит строить с проверками. Типовой приём — пропускать строки, где ключевая колонка пуста, и начинать чтение не со второй строки, а с той, где реально начинаются данные (её можно определить поиском строки-заголовка по тексту первой ячейки).
С типами данных есть нюансы. Числа, записанные в Excel как текст (например, артикулы с ведущими нулями), при способе чтения «Значение» могут потерять нули или превратиться в число. Даты Excel хранятся как числа, и платформа обычно преобразует их корректно, но если ячейка отформатирована нестандартно, можно получить число вместо даты. Безопасный приём — проверять тип значения через ТипЗнч() и при необходимости приводить врукую: Число(), Дата(), Строка() с обработкой исключений.
Для штрихкодов, артикулов и кодов всегда читайте Текст ячейки, а не Значение — это сохранит строковое представление без потерь. Для сумм и количеств, наоборот, берите Значение и проверяйте, что это число, иначе обрабатывайте строку, убирая пробелы-разделители разрядов и заменяя запятую на точку перед Число().
Проверка результата и обработка ошибок
После чтения файла полезно сразу проверить, что документ вообще заполнен: если ВысотаТаблицы равна нулю, файл пуст, повреждён или имеет неподдерживаемый формат. Сам метод Прочитать() при невозможности прочитать файл вызывает исключение, поэтому вызов следует оборачивать в Попытка ... Исключение ... КонецПопытки с выводом понятного сообщения пользователю.
При массовой загрузке записывайте объекты порциями и ведите журнал ошибок: какая строка файла не загрузилась и почему. Простой вариант — собирать сообщения в таблицу значений и показывать её пользователю по завершении. Это позволяет исправить исходный файл точечно, а не гадать, какие позиции потерялись.
Как проверить результат
Больше нуля, соответствует числу строк в файле
Ноль или ошибка чтения — файл пуст, повреждён или не тот формат
ТипЗнч возвращает Число, суммы сходятся с исходником
Строки с пробелами-разделителями, ошибки преобразования
Совпадают посимвольно с файлом, ведущие нули на месте
Потеряны нули, появилась экспоненциальная запись
Тип Дата, значения в ожидаемом диапазоне
Числа вместо дат или сдвиг на десятилетия
Ограничения способа и когда он не подходит
Чтение через табличный документ имеет пределы. Очень большие файлы (сотни тысяч строк) загружаются медленно и потребляют много памяти, потому что платформа строит полное представление документа с форматированием. Для таких объёмов эффективнее потоковые механизмы или предварительная конвертация в CSV.
Не читаются формулы как формулы — в ячейках оказываются вычисленные значения. Не переносятся макросы, сводные таблицы и диаграммы. Если нужен конкретный лист многолистовой книги или чтение по именованным диапазонам, придётся либо готовить файл заранее, либо использовать другие инструменты.
Альтернативные способы загрузки Excel в 1С
Кроме табличного документа, существуют другие варианты, которые стоит знать, чтобы выбрать подходящий под задачу.
Сравнение вариантов
Универсально, не требует Excel, работает на клиенте и сервере. Ограничение — медленно на очень больших файлах, один лист за раз
Полный доступ к листам, формулам, форматам. Требует установленный Excel на машине, где выполняется код, не работает на Linux-сервере, уязвимо к зависаниям
Быстро и просто для плоских данных, легко читается построчно через ЧтениеТекста. Теряются типы и форматирование, проблемы с разделителями и кодировками
Готовый интерфейс сопоставления колонок без программирования. Подходит для разовых загрузок, но менее гибок для нестандартной логики
Выбор зависит от условий: если файл присылают регулярно в одном формате — пишите загрузку через табличный документ; если это разовая операция и конфигурация типовая — проще воспользоваться встроенной обработкой загрузки; если файлы огромные — рассмотрите CSV или потоковое чтение.
Как выбрать действие
Практический порядок внедрения загрузки
Чтобы загрузка работала стабильно, действуйте последовательно: сначала получите образец реального файла от тех, кто будет его присылать, и зафиксируйте структуру колонок. Затем напишите чтение и обход строк с выводом распознанных значений в сообщения — это позволит увидеть, как платформа интерпретировала данные, до записи в базу.
- 1Получите образец файла и зафиксируйте номера и смысл колонок, номер первой строки данных
- 2Напишите чтение через ТабличныйДокумент.Прочитать() и выведите значения первых строк в сообщения для проверки типов
- 3Добавьте пропуск пустых строк, проверку типов и преобразование чисел и дат
- 4Реализуйте поиск или создание объектов базы с записью ошибок по каждой строке
- 5Протестируйте на копии базы на малом объёме, сверьте с исходником, затем запустите полную загрузку
Закрепите договорённость о формате файла с теми, кто его готовит: фиксированный порядок колонок, отсутствие объединённых ячеек в области данных, единый формат дат и чисел. Большинство проблем загрузки из Excel — это не ошибки кода, а «плавающая» структура исходного файла.
Полезный приём — не привязываться жёстко к номерам колонок, а находить их по тексту шапки: пройти по первой строке, сопоставить заголовки с ожидаемыми и запомнить номера. Тогда лишняя колонка в файле поставщика не сломает загрузку.
Частые вопросы
Нужен ли установленный Excel для чтения файла через табличный документ?
Нет. Метод ТабличныйДокумент.Прочитать() работает средствами платформы 1С и не требует установленного Microsoft Excel ни на клиенте, ни на сервере. Это одно из главных преимуществ способа перед COM-соединением.
Почему числа из Excel читаются как строки?
Чаще всего потому, что в файле ячейки отформатированы как текст, либо выбран способ чтения «Текст». Переключитесь на СпособЧтенияЗначенийТабличногоДокумента.Значение, а если значения всё равно строковые — убирайте пробелы-разделители разрядов, заменяйте запятую на точку и преобразуйте через Число() внутри Попытка/Исключение.
Как прочитать не первый, а второй или третий лист книги?
Табличный документ напрямую читает только первый лист. Варианты обхода: попросить присылать данные отдельным файлом, сохранить нужный лист как отдельный xlsx перед загрузкой, использовать COM-доступ к Excel либо сторонние компоненты чтения формата.
Что делать, если файл не открывается и возникает ошибка чтения?
Проверьте, что файл действительно в формате xlsx или xls, а не переименованный файл другого типа, что он не защищён паролем и не занят другим приложением. Защищённые паролем книги платформа не читает — пароль нужно снять до загрузки.
Как не потерять ведущие нули в артикулах и штрихкодах?
Читайте такие колонки через свойство Текст области, а не Значение. Если файл формируете вы сами, заранее установите для этих колонок текстовый формат ячеек в Excel — тогда данные сохранятся корректно при любом способе чтения.
Подходит ли способ для регламентной загрузки больших прайсов?
Для файлов умеренного размера — да, особенно если загрузка выполняется на сервере фоновым заданием. Для очень больших файлов табличный документ медленный и требователен к памяти: в этом случае лучше конвертировать прайс в CSV и читать построчно.
Что важно запомнить
Чтение Excel как табличного документа — это ТабличныйДокумент.Прочитать() со способом чтения «Значение» и обход ячеек через Область(строка, колонка). Способ не требует Excel, но читает один лист и медленен на огромных файлах. Проверяйте типы значений, пропускайте пустые строки, ведите журнал ошибок и тестируйте загрузку на копии базы перед запуском в рабочей.