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

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

Как записать файл Excel из 1С: способы и примеры

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

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

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

Способы записи Excel из 1С: что выбрать

Существует три основных подхода. Первый — сохранение табличного документа встроенными средствами платформы. Он не требует ничего, кроме самой 1С, работает на сервере и на клиенте, поддерживает форматы XLSX, XLS, ODS. Подходит для большинства выгрузок.

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

Третий вариант — формирование файла в формате CSV или MXL с последующим открытием в Excel. Это компромисс, когда нужна максимальная скорость и простота, а форматирование не важно.

Сравнение способов записи Excel

Табличный документ + Записать()

Универсально, быстро, работает без Office. Ограничение: нет формул и сложных элементов Excel.

COM-объект Excel.Application

Полный контроль над книгой, формулы и макросы. Требует установленный Office, медленнее, не работает на сервере без Office.

CSV-выгрузка

Максимальная скорость и минимальный код. Нет форматирования, проблемы с разделителями и кодировками.

Запись через табличный документ: базовый метод

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

Типовой код выглядит так:

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

// Заполнение областей

Область = ТабДок.Область("R1C1");

Область.Текст = "Номенклатура";

Область = ТабДок.Область("R1C2");

Область.Текст = "Цена";

// Запись в файл Excel

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

Если файл нужно отдать пользователю через браузер (тонкий или веб-клиент), файл сначала записывается во временное хранилище на сервере, а затем передаётся на клиент методом ПолучитьФайл или через диалог сохранения.

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

Выгрузка с форматированием и макетами

На практике табличный документ редко заполняют по одной ячейке. Удобнее создать макет в конфигураторе с областями (шапка, строка, подвал) и выводить их последовательно через методы ПолучитьОбласть и Вывести. Все параметры оформления, заданные в макете, переносятся в Excel автоматически.

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

Запись через COM-объект Excel

Когда нужны формулы, закреплённые области, автофильтры или заполнение готового шаблона Excel, используют COM-соединение. Платформа создаёт объект Excel.Application, открывает или создаёт книгу и работает с листами напрямую.

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

Excel.Visible = Ложь;

Книга = Excel.Workbooks.Add();

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

Лист.Cells(1, 1).Value = "Товар";

Лист.Cells(1, 2).Value = "Остаток";

Лист.Cells(2, 2).Formula = "=SUM(B3:B10)";

Книга.SaveAs("C:\Выгрузки\Отчет.xlsx");

Книга.Close();

Excel.Quit();

Обязательно завершайте работу методами Close и Quit, иначе процесс Excel останется висеть в памяти. При массовых выгрузках такие «зависшие» процессы быстро исчерпывают ресурсы сервера.

Обмен двоичными данными и работа без пути к файлу

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

Поток = Новый ПотокВПамяти();

ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.XLSX);

ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();

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

Типичные ошибки и их устранение

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

Типичные ошибки
01
Запись в формат XLS вместо XLSX при большом объёме — старый формат ограничен 65536 строками, данные обрезаются
02
Вывод чисел строками — в Excel невозможно посчитать суммы и применить числовые фильтры
03
Не закрыт COM-объект Excel — процессы EXCEL.EXE накапливаются и съедают память сервера
04
Запись файла на клиенте при работе через веб-клиент без передачи с сервера — файл создаётся не там, где ожидает пользователь
05
Отсутствие проверки пути — ошибка записи при отсутствии каталога или прав на него

Для кириллицы в CSV-файлах отдельно задавайте кодировку UTF-8 с BOM, иначе Excel откроет файл с неверной кодировкой. Для табличного документа эта проблема неактуальна — формат XLSX хранит текст в Unicode.

Проверка результата

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

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

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

Файл открывается в Excel
Норма

Открывается без предупреждений о повреждении

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

Excel сообщает о проблеме с содержимым или предлагает восстановление

Числа и даты
Норма

Можно применить сумму, сортировку по дате

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

Значения выровнены влево как текст, формулы не считаются

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

Совпадает с количеством записей в выборке

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

Данные обрезаны или продублированы

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

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

Да. Сохранение табличного документа методом Записать() в формат XLSX выполняется полностью средствами платформы и не требует Microsoft Office ни на клиенте, ни на сервере. Office нужен только для работы через COM-объект Excel.Application.

Как выгрузить более 65 тысяч строк в Excel?

Используйте формат XLSX — он поддерживает более миллиона строк на листе. Ограничение в 65536 строк относится к устаревшему формату XLS. При очень больших объёмах также помогает отключить автоподбор ширины колонок и минимизировать оформление ячеек.

Почему при открытии файла из 1С Excel пишет, что файл повреждён?

Чаще всего причина в несоответствии расширения файла и фактического формата: например, данные записаны как XLSX, а файл назван с расширением .xls. Проверьте, что тип файла в методе Записать() соответствует расширению в имени файла.

Как записать файл на сервере и отдать пользователю?

Запишите табличный документ во временный файл или поток на сервере, поместите двоичные данные во временное хранилище (ПоместитьВоВременноеХранилище), а на клиенте получите их методом ПолучитьФайл или через ПолучитьФайлССервера с диалогом выбора места сохранения.

Можно ли добавить в файл формулы Excel?

Через табличный документ — нет, туда выгружаются только значения и оформление. Формулы, диаграммы и другие возможности Excel доступны при работе через COM-объект Excel.Application, где ячейке можно присвоить свойство Formula.

Что быстрее: табличный документ или COM-объект?

Запись табличного документа существенно быстрее, особенно на объёмах в десятки тысяч строк: COM-обращение к каждой ячейке Excel выполняется медленно. Если формулы не нужны, всегда выбирайте табличный документ.

Итог

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

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