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