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

Автоматизация · 10 мин

Как считать данные из Excel в 1С

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

Задача «считать Excel в 1С» обычно означает одно из трёх: прочитать данные из файла Excel в базу 1С, выполнить расчёты по данным таблицы внутри 1С или выгрузить результат обратно в Excel с формулами. Во всех случаях есть два основных механизма: чтение через объект COM Excel и чтение через встроенный табличный документ 1С. Выбор зависит от того, установлен ли Excel на компьютере, где работает 1С, и насколько велики файлы.

Чтение через табличный документ работает везде, где работает 1С, и не требует установленного Excel. COM-подключение даёт доступ к формулам, листам и форматированию, но зависит от установленного офисного пакета и работает заметно медленнее на больших файлах. Ниже разобраны оба способа, расчёт данных после загрузки и типовые ошибки.

Какие способы чтения Excel существуют в 1С

Платформа 1С умеет открывать файлы xlsx и xls напрямую: табличный документ понимает эти форматы начиная с версий платформы 8.3. Метод ТабличныйДокумент.Прочитать(ИмяФайла) загружает лист целиком, после чего данные доступны через область ячеек. Этот способ не требует Excel, работает на сервере и в Linux-окружении.

Второй способ — COM-объект Excel.Application. Он даёт полный доступ к книге: листы, именованные диапазоны, формулы, значения с учётом пересчёта. Ограничения очевидны: Excel должен быть установлен на том компьютере, где выполняется код, а при серверном вызове — на сервере 1С, что в корпоративной среде почти никогда не делается.

Третий вариант — готовые типовые механизмы. В конфигурациях на БСП (Библиотека стандартных подсистем) есть загрузка данных из табличного документа, в «Управлении торговлей» и ERP — обработки загрузки прайсов и номенклатуры из Excel. Если задача разовая и типовая, сначала проверьте, нет ли готовой обработки в вашей конфигурации.

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

Табличный документ (Прочитать)

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

COM Excel.Application

Нужен, когда требуется пересчёт формул, работа с несколькими листами и запись в файл. Требует установленный Excel, медленный на больших объёмах.

Типовые обработки конфигурации

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

Как прочитать файл Excel через табличный документ

Базовый сценарий выглядит так: создаёте объект табличного документа, вызываете Прочитать() с путём к файлу и типом файла, затем обходите строки и колонки. Область данных определяется через Область() или по размерам табличного документа — свойствам ВысотаТаблицы и ШиринаТаблицы.

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

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

Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл

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

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

// дальше — преобразование и запись в базу

КонецЦикла;

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

Порядок чтения файла
  1. 1
    Сохраните файл Excel в доступный каталог и закройте его в Excel, чтобы не было блокировки
  2. 2
    Создайте табличный документ и вызовите Прочитать() с нужным способом чтения значений
  3. 3
    Определите строку заголовка и начинайте обход со следующей строки
  4. 4
    Преобразуйте значения ячеек к нужным типам: число, дата, ссылка на справочник
  5. 5
    Запишите данные в базу в транзакции и проверьте количество загруженных строк

Как работать через COM-объект Excel

COM-подключение создаётся кодом Новый COMОбъект("Excel.Application"). Дальше открывается книга через Workbooks.Open(), выбирается лист, и ячейки читаются через Cells(строка, колонка).Value. Главное преимущество — доступ к Value с уже вычисленными формулами и возможность принудительного пересчёта методом Calculate().

Обязательно завершайте работу корректно: закрывайте книгу без сохранения (Close(Ложь)), вызывайте Quit() и обнуляйте объект. Иначе в памяти остаются зависшие процессы EXCEL.EXE, которые со временем блокируют файлы и съедают ресурсы сервера. Размещайте закрытие в блоке Исключение тоже — через отдельную попытку.

Для ускорения массового чтения отключайте обновление экрана (Application.ScreenUpdating = Ложь) и читайте диапазоны массивом через Range.Value вместо поячеечного обхода — разница в скорости на файлах в десятки тысяч строк достигает десятков раз.

Как считать и рассчитывать данные после загрузки

После чтения данные обычно складывают в таблицу значений — это основной инструмент расчётов в 1С. Таблица значений поддерживает группировку через Свернуть(), итоги по колонкам через Итог(), сортировку и поиск. Для сложных агрегаций удобнее поместить таблицу во временную таблицу запроса и считать суммы, средние и количества запросом.

Типичный расчёт выглядит так: загруженные строки помещаются в таблицу значений с типизированными колонками, затем запросом выполняется соединение со справочником номенклатуры и группировка с суммированием. Результат либо выводится пользователю, либо записывается в документ — например, в табличную часть «Установки цен номенклатуры».

Если требуется именно «считать как Excel» — то есть выполнять формулы вида СУММ, ВПР над данными внутри 1С — прямого аналога нет. Формулы заменяются кодом на встроенном языке или запросами. Для отчётов с итогами используйте СКД: она покрывает большинство задач группировки и агрегирования без программирования.

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

Самая частая проблема — даты. Excel хранит даты как числа, и при чтении текстом можно получить «45292» вместо даты. При способе чтения «Значение» платформа обычно сама преобразует такие ячейки, но если файл формировался сторонней системой, проверяйте тип значения в отладчике и при необходимости конвертируйте число в дату вручную от базовой даты Excel.

Вторая группа ошибок — структурные: объединённые ячейки в шапке, промежуточные итоги внутри данных, пустые строки между блоками. Такие файлы нельзя обходить «в лоб». Решение — договориться о плоском шаблоне: первая строка заголовки, дальше только данные, без объединений и итоговых строк.

Третья проблема — производительность. Поячеечное чтение файла на 50–100 тысяч строк через COM может занять десятки минут. Даже табличный документ на очень больших файлах потребляет много памяти. Для больших выгрузок просите поставщика данных сохранять файл в CSV: чтение текстового файла построчно на порядок быстрее и экономнее по памяти.

Типичные ошибки
01
Чтение поячеечно через COM в цикле — на больших файлах обработка занимает часы; читайте диапазон массивом
02
Отсутствие Quit() и обнуления COM-объекта — в системе копятся зависшие процессы EXCEL.EXE
03
Преобразование чисел без очистки от неразрывных пробелов — получаете нули и расхождения в итогах
04
Обход файла с объединёнными ячейками и промежуточными итогами — данные смещаются и загружаются мусорные строки
05
Запись в базу без транзакции — при обрыве на середине остаётся частично загруженный документ

Как проверить результат загрузки

Контроль начинайте с простых сверок: количество прочитанных строк должно совпасть с количеством строк данных в файле, сумма по ключевой числовой колонке в 1С — с итогом в Excel. Расхождение даже на одну строку означает, что где-то потерялись данные или загрузился мусор.

Полезно выводить журнал загрузки: сколько строк прочитано, сколько записано, сколько пропущено и почему. Строки, которые не удалось сопоставить со справочником (не найден артикул, контрагент), собирайте в отдельную таблицу и показывайте пользователю — тихий пропуск данных хуже явной ошибки.

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

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

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

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

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

Меньше — строки потеряны; больше — загружены служебные строки или итоги

Итоговая сумма по колонке
Норма

Совпадает с суммой в Excel до копейки

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

Расхождение — ошибки преобразования чисел или пропущенные строки

Сопоставление со справочниками
Норма

Все артикулы/контрагенты найдены, журнал ошибок пуст

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

Есть несопоставленные строки — нужно дополнить справочник или исправить файл

Процессы после COM-чтения
Норма

EXCEL.EXE завершён после обработки

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

Процесс висит в диспетчере задач — утечка COM-объекта

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

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

Да. Табличный документ 1С читает xlsx и xls напрямую методом Прочитать() — это штатная возможность платформы, не требующая офисного пакета. Ограничение: формулы будут прочитаны как текст или как последнее сохранённое значение, пересчитать их без Excel нельзя.

Почему даты из Excel загружаются числами?

Excel хранит даты как количество дней от базовой даты. Если ячейка отформатирована как число или файл создан сторонней программой, читается именно число. Используйте способ чтения «Значение» или преобразуйте число в дату вручную, добавив его к дате начала отсчёта Excel.

Что быстрее для больших файлов: COM или табличный документ?

Табличный документ обычно быстрее и стабильнее, но на очень больших файлах потребляет много памяти. Самый быстрый вариант — попросить данные в формате CSV и читать текстовый файл построчно: скорость вырастает в разы, а требования к памяти минимальны.

Как загрузить данные сразу в документ, минуя ручной ввод?

Прочитайте файл в таблицу значений, затем создайте объект документа программно, заполните табличную часть строками таблицы и запишите. Всю операцию оборачивайте в транзакцию, чтобы при ошибке не осталось частично заполненного документа.

Почему после обработки в диспетчере задач остаётся EXCEL.EXE?

COM-объект не был корректно освобождён: не вызван Quit() или переменная не обнулена, либо код завершился по исключению до закрытия. Завершение работы Excel размещайте в блоке обработки исключений и всегда обнуляйте COM-объект после Quit().

Можно ли выполнять формулы Excel внутри 1С?

Прямого движка формул Excel в платформе нет. Вычисления реализуются кодом на встроенном языке, запросами или СКД. Если нужен именно пересчёт формул из файла — используйте COM с методом Calculate(), либо переносите логику расчёта в запрос.

Итог

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

Для чтения Excel в 1С по умолчанию используйте табличный документ — он не требует Excel и работает на сервере. COM применяйте только ради формул и записи в файл, всегда корректно завершая процесс. Расчёты выполняйте таблицей значений и запросами, а результат проверяйте сверкой количества строк и итоговых сумм.