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

Разработка и Конфигурация · 11 мин

Как прочитать файл Excel в 1С

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

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

Выбор метода зависит от условий: установлен ли Microsoft Excel на компьютере, где выполняется код, какой формат файла нужно прочитать (xls, xlsx, csv), где выполняется обработка — на клиенте или на сервере, и насколько велик файл. Ниже разобраны основные способы с примерами кода, проверкой результата и типичными ошибками.

Что нужно проверить перед чтением файла

Прежде чем писать код, определите три вещи. Во-первых, формат файла: старый бинарный .xls, современный .xlsx или текстовый .csv. От этого зависит, какие механизмы доступны. Во-вторых, место выполнения кода: на клиенте, где есть Excel пользователя, или на сервере 1С, где Excel обычно не установлен и устанавливать его не рекомендуется. В-третьих, структуру данных: есть ли строка заголовков, сколько листов в книге, начинаются ли данные с первой строки.

Также убедитесь, что файл не открыт в Excel в момент чтения — это самая частая причина ошибок «файл занят» или чтения устаревшей версии. Если файл приходит от контрагентов, заранее договоритесь о фиксированной структуре колонок, иначе любая перестановка столбцов сломает загрузку.

Способ 1. Чтение через ТабличныйДокумент — без установленного Excel

Объект «ТабличныйДокумент» в платформе 1С умеет открывать файлы форматов xls, xlsx, mxl, ods и некоторых других напрямую, без какого-либо офисного пакета. Это самый простой и безопасный способ, который работает и на клиенте, и на сервере.

Минимальный код выглядит так:

ТабДок = Новый ТабличныйДокумент;

ТабДок.Прочитать("C:\Данные\Прайс.xlsx", СпособЧтенияЗначенийТабличногоДокумента.Значение);

ВсегоСтрок = ТабДок.ВысотаТаблицы;

ВсегоКолонок = ТабДок.ШиринаТаблицы;

Для НомерСтроки = 2 По ВсегоСтрок Цикл

Наименование = ТабДок.Область(НомерСтроки, 1).Текст;

ЦенаСтрокой = ТабДок.Область(НомерСтроки, 3).Текст;

// дальнейшая обработка значений

КонецЦикла;

Обратите внимание на параметр СпособЧтенияЗначенийТабличногоДокумента: значение «Значение» возвращает вычисленный результат ячеек, «Текст» — отображаемое представление. Для загрузки чисел и дат обычно удобнее «Значение», но помните, что из ячейки вы получаете строку или число — приведение типов нужно делать явно, с обработкой ошибок через Попытка/Исключение.

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

Способ 2. Чтение через COM-объект Excel.Application

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

Попытка

Excel = Новый COMОбъект("Excel.Application");

Исключение

Сообщить("Excel не установлен или недоступен: " + ОписаниеОшибки());

Возврат;

КонецПопытки;

Excel.DisplayAlerts = Ложь;

Книга = Excel.Workbooks.Open("C:\Данные\Прайс.xlsx");

Лист = Книга.Worksheets(1);

ПоследняяСтрока = Лист.Cells(Лист.Rows.Count, 1).End(-4162).Row; // xlUp

Для НомерСтроки = 2 По ПоследняяСтрока Цикл

Наименование = СокрЛП(Лист.Cells(НомерСтроки, 1).Value);

КонецЦикла;

Книга.Close(Ложь);

Excel.Quit();

Excel = Неопределено;

Критически важно всегда закрывать книгу и вызывать Quit(), иначе в памяти останутся зависшие процессы EXCEL.EXE, которые со временем заблокируют файлы и перегрузят сервер терминалов. Блок Попытка/Исключение должен охватывать всю работу, а в секции Исключение тоже нужно пытаться закрыть Excel.

Способ 3. Чтение через ADO (OLE DB)

ADO позволяет читать лист Excel как таблицу базы данных SQL-запросом, без открытия приложения Excel. Способ требует наличия провайдера OLE DB (ACE OLEDB) соответствующей разрядности и хорошо подходит для больших файлов, потому что работает быстрее построчного обхода ячеек через COM.

Идея кода: создаётся COMОбъект("ADODB.Connection"), в строке подключения указывается провайдер Microsoft.ACE.OLEDB и путь к файлу, затем выполняется запрос вида SELECT * FROM [Лист1$]. Результат обходится как набор записей через Recordset. Главные ограничения: провайдер должен совпадать по разрядности с процессом 1С, типы колонок определяются по первым строкам (смешанные данные могут читаться как NULL), а имя листа в запросе должно точно совпадать с реальным.

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

ТабличныйДокумент

Работает везде без Excel, простой код. Ограничение: один лист, медленно на очень больших файлах.

COM Excel.Application

Полный доступ к книге, формулам и листам. Ограничение: нужен установленный Excel, риск зависших процессов.

ADO / OLE DB

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

Конвертация в CSV

Максимально надёжно и быстро, читается встроенным ТекстовыйДокумент. Ограничение: требует подготовки файла, теряются форматы и листы.

Как выбрать способ под свою задачу

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

Маршрут решения

Как выбрать способ

Excel на компьютере не установлен или код выполняется на сервереИспользуйте ТабличныйДокумент с методом Прочитать()
Нужно читать несколько листов или формулы, Excel установленИспользуйте COMОбъект Excel.Application с обязательным Quit()
Файл очень большой, нужна фильтрация строкИспользуйте ADO-запрос или попросите данные в CSV
Файл приходит от внешнего контрагента регулярноДоговоритесь о CSV-формате и читайте ТекстовыйДокумент — это самый стабильный вариант

Проверка результата и обработка данных

После чтения не записывайте данные в базу сразу — сначала проверьте, что прочиталось именно то, что ожидалось. Контрольные точки: количество прочитанных строк совпадает с количеством строк в файле минус заголовок; числовые колонки действительно содержат числа (функция проверки через попытку преобразования); даты распознаны корректно, а не как текст; нет «съехавших» колонок, когда значение цены попадает в колонку наименования.

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

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

Как проверить результат чтения

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

Совпадает с числом строк данных в файле

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

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

Числовые колонки
Норма

Значения преобразуются в тип Число без ошибок

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

Ошибки преобразования — в ячейках текст, пробелы или разделитель дробной части не совпадает с региональными настройками

Даты
Норма

Распознаются как тип Дата с правильным днём и месяцем

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

День и месяц перепутаны местами или дата прочитана как число

Первая строка данных
Норма

Прочитана вторая строка файла (после заголовка)

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

Заголовок попал в данные или первая строка данных потеряна

Типичные ошибки и как их избежать

Большинство проблем при чтении Excel в 1С повторяются от проекта к проекту. Знание этих ошибок экономит часы отладки.

Типичные ошибки
01
Не закрыт COM-объект Excel — в памяти копятся процессы EXCEL.EXE, файлы блокируются. Всегда вызывайте Quit() и обнуляйте переменную.
02
Чтение без проверки существования файла — обработка падает с непонятной ошибкой. Проверяйте файл через Файл.Существует().
03
Жёсткая привязка к номерам колонок без проверки заголовков — поставщик поменял колонки местами, и цены загрузились в наименования. Сверяйте текст заголовков перед чтением.
04
Игнорирование разделителя дробной части — число '1 234,56' с неразрывным пробелом не преобразуется. Очищайте строки от пробелов и приводите разделитель.
05
Чтение огромного файла целиком в ТабличныйДокумент на клиенте — база 'зависает' на минуты. Для больших файлов используйте ADO или CSV.
06
Открытый в Excel файл в момент загрузки — читается старая версия или возникает ошибка доступа. Закрывайте файл перед загрузкой.

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

Частые вопросы

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

Да. Объект ТабличныйДокумент методом Прочитать() открывает xls и xlsx без офисного пакета — это штатная возможность платформы. Работает и на клиенте, и на сервере. Ограничение — читается один лист и нет доступа к формулам.

Почему числа из Excel читаются как текст?

Чаще всего из-за неразрывных пробелов в качестве разделителя тысяч, другого символа дробной части или того, что ячейка в Excel отформатирована как текст. Перед преобразованием удаляйте пробелы функцией СтрЗаменить и приводите разделитель к точке или запятой в зависимости от настроек.

Как прочитать не первый, а нужный лист книги?

Через ТабличныйДокумент выбрать лист нельзя — читается активный лист. Если нужен конкретный лист, используйте COM-объект Excel (Worksheets с индексом или именем) либо ADO-запрос с указанием имени листа в формате [ИмяЛиста$].

Что делать, если файл очень большой и чтение зависает?

ТабличныйДокумент на файлах в сотни тысяч строк работает медленно и потребляет много памяти. Варианты: читать через ADO с SQL-фильтрацией, попросить поставщика данных выгружать CSV (читается ТекстовыйДокумент построчно и быстро) или разбивать файл на части.

Как загрузить данные из Excel в веб-клиенте 1С?

В веб-клиенте COM-объекты недоступны. Файл передаётся на сервер через помещение во временное хранилище (НачатьПомещениеФайла), а на сервере читается ТабличныйДокументом. Это стандартная схема загрузки файлов в браузерном режиме.

Безопасно ли открывать Excel-файлы от контрагентов через COM?

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

Итог

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

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