Разработка и Конфигурация · 12 мин
Как создать файл Excel в 1С: способы, код и нюансы
Как создать файл Excel в 1С: табличный документ, COM-объект и пакет OpenXML. Примеры кода, выбор способа, частые ошибки и ответы на вопросы.
Выгрузка данных в Excel — одна из самых частых задач при работе с 1С: отчёты для руководства, прайс-листы для клиентов, обмен с контрагентами, которые не используют 1С. Платформа предлагает несколько принципиально разных способов создать файл Excel, и выбор между ними влияет на скорость, требования к серверу и качество результата.
Основных подхода три: сохранение табличного документа в формате XLSX, работа через COM-объект Excel.Application и формирование файла через пакет документов OpenXML. Первый способ самый простой и доступен везде, второй даёт полный контроль над форматированием, но требует установленного Excel, третий работает на сервере без офисного пакета.
Ниже разобран каждый способ с готовым кодом, условиями применения и типичными ошибками. Материал ориентирован на разработчиков и продвинутых пользователей, работающих с управляемыми формами и конфигурациями на платформе 8.3.
Способ 1: сохранение табличного документа в Excel
Табличный документ — встроенный объект платформы, который визуально похож на лист Excel и умеет сохраняться в форматы XLSX, XLS, ODS и другие. Это стандартный путь для выгрузки отчётов и печатных форм: вы формируете табличный документ привычными средствами (макеты, области, СКД), а затем одной строкой сохраняете его в файл.
Минимальный пример кода:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Номенклатура";
ТабДок.Область("R1C2").Текст = "Цена";
ТабДок.Область("R2C1").Текст = "Товар 1";
ТабДок.Область("R2C2").Текст = 1500;
ТабДок.Записать("C:\Выгрузка\Прайс.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Метод Записать() принимает путь к файлу и тип файла. Для современного формата используйте ТипФайлаТабличногоДокумента.XLSX, для старого формата Excel 97–2003 — XLS. Если файл с таким именем существует, он будет перезаписан без предупреждения, поэтому при пакетной выгрузке формируйте уникальные имена, например с датой и временем.
Главное ограничение способа — форматирование переносится не полностью. Условное форматирование, сводные таблицы, диаграммы и некоторые виды объединённых ячеек в Excel могут выглядеть иначе, чем в 1С. Для простых таблиц с данными, шапкой и числовыми колонками результат вполне достойный.
Способ 2: работа через COM-объект Excel.Application
Если нужен полный контроль над книгой Excel — формулы, автофильтры, закрепление областей, стили ячеек, несколько листов — используется автоматизация через COM. 1С создаёт экземпляр приложения Excel и управляет им как обычный макрос VBA.
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Excel не установлен: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Excel.Visible = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Номенклатура";
Лист.Cells(1, 2).Value = "Цена";
Лист.Cells(2, 1).Value = "Товар 1";
Лист.Cells(2, 2).Value = 1500;
Лист.Columns.AutoFit();
Книга.SaveAs("C:\Выгрузка\Прайс.xlsx");
Книга.Close(0);
Excel.Quit();
Excel = Неопределено;
Критическое требование: на компьютере, где выполняется код, должен быть установлен Microsoft Excel. Если код выполняется на сервере 1С, Excel должен стоять именно на сервере, что в корпоративной среде часто запрещено политиками безопасности и лицензирования. Поэтому COM-подход обычно применяют в файловых базах или в процедурах, выполняемых на клиенте.
Обязательно завершайте работу корректно: закройте книгу, вызовите Quit() и обнулите переменную. Иначе в диспетчере задач останутся «висящие» процессы EXCEL.EXE, которые со временем съедают память и блокируют файлы. Особенно это актуально при ошибках в середине кода — оборачивайте работу с Excel в Попытка/Исключение с гарантированным завершением.
Способ 3: пакет OpenXML без установленного Excel
Формат XLSX — это ZIP-архив с XML-файлами внутри. Платформа 1С умеет работать с такими пакетами через объект ПакетОтображаемогоДокумента и низкоуровневую запись ZIP, что позволяет создать файл Excel на сервере без установленного Office. Это правильный выбор для регламентных заданий и серверных выгрузок.
Технически способ сложнее: нужно сформировать структуру пакета — workbook.xml, листы, таблицу строк sharedStrings, стили. Ошибка в любом XML делает файл нечитаемым для Excel. На практике чаще используют готовые библиотеки и подсистемы (например, механизмы обмена из типовых конфигураций), либо комбинированный подход: табличный документ сохраняется в XLSX на сервере, что тоже не требует Excel.
Важно понимать: сохранение табличного документа в XLSX из первого способа на сервере тоже работает без установленного Office. Поэтому чистый OpenXML имеет смысл только тогда, когда нужны возможности, которых нет у табличного документа, — например, потоковая запись очень больших файлов с минимальным потреблением памяти.
Сравнение способов
Подходит для большинства выгрузок: простой код, работает на сервере без Office. Ограничение — неполное сохранение сложного форматирования.
Полный контроль: формулы, фильтры, стили, несколько листов. Требует установленный Excel там, где выполняется код, и аккуратного завершения процесса.
Серверная генерация без Office, контроль над структурой файла. Сложная реализация, высокая цена ошибки в XML.
Как выбрать способ под свою задачу
Выбор определяется тремя вопросами: где выполняется код (клиент или сервер), установлен ли Excel и насколько сложное форматирование нужно в итоговом файле. Для типовой выгрузки «таблица с данными» ответ почти всегда один — табличный документ.
Если файл должен содержать формулы Excel, которые пересчитываются при открытии, выпадающие списки или защищённые листы — без COM или OpenXML не обойтись. Если выгрузка выполняется регламентным заданием ночью на сервере, COM-вариант отпадает сразу.
Как выбрать действие
Пошаговый сценарий: выгрузка данных из справочника
Типовая задача — выгрузить список номенклатуры с ценами в Excel по кнопке. Порядок действий одинаков для большинства подобных выгрузок.
- 1Создайте новый объект ТабличныйДокумент и при необходимости подготовьте макет с областями шапки и строки
- 2Выполните запрос к данным (справочник, регистр) и обойдите выборку, заполняя области табличного документа
- 3Настройте ширину колонок, шрифт шапки и формат числовых ячеек через свойства областей
- 4Вызовите Записать() с типом файла XLSX — на сервере во временный файл, на клиенте — сразу в выбранный каталог
- 5Передайте файл пользователю через диалог сохранения или ПолучитьФайл() из временного хранилища
- 6Откройте полученный файл в Excel и проверьте данные, форматы чисел и кодировку текста
Пример заполнения по выборке из запроса:
Запрос = Новый Запрос("ВЫБРАТЬ Наименование, Цена ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Номенклатура";
ТабДок.Область("R1C2").Текст = "Цена";
Строка = 2;
Пока Выборка.Следующий() Цикл
ТабДок.Область("R" + Строка + "C1").Текст = Выборка.Наименование;
ТабДок.Область("R" + Строка + "C2").Текст = Выборка.Цена;
Строка = Строка + 1;
КонецЦикла;
Если в выгрузке есть числа, которые Excel должен считать числами (суммы, количества), записывайте их в область как число, а не как строку. Иначе в Excel они попадут как текст, и пользователь не сможет строить по ним формулы без преобразования.
Частые ошибки и ограничения
Большинство проблем при создании Excel-файлов в 1С связаны не с самим кодом, а с окружением: правами на каталог, разрядностью, занятым файлом. Ниже — то, что встречается чаще всего.
Отдельного внимания заслуживают большие выгрузки. Табличный документ держит всё в памяти, и при сотнях тысяч строк файл формируется долго, а сервер может уйти в нехватку памяти. В таких случаях выгружайте порциями в CSV или разбивайте результат на несколько файлов.
Проверка результата
После формирования файла не ограничивайтесь отсутствием ошибок в коде — откройте файл в Excel и проверьте содержимое глазами. Автоматическая проверка в 1С тоже возможна: файл можно перечитать через ТабличныйДокумент.Прочитать() и сверить количество строк.
Как проверить результат
Открывается без предупреждений о повреждении
Excel сообщает о нечитаемом содержимом или предлагает восстановление
Совпадает с количеством записей в выборке плюс шапка
Строк меньше — обрыв цикла, больше — лишние итоговые области
Числа выравнены вправо, по ним работает сумма в строке состояния
Числа выровнены влево и помечены как текст
Текст отображается корректно
Кракозябры или потерянные символы — проблема кодировки
Частые вопросы
Можно ли создать файл Excel в 1С без установленного Microsoft Office?
Да. Сохранение табличного документа в формат XLSX выполняется средствами платформы и не требует Office ни на клиенте, ни на сервере. Без Excel не работает только способ через COM-объект Excel.Application.
Как добавить в файл несколько листов?
Через табличный документ штатно сохраняется один лист. Для нескольких листов используйте COM-автоматизацию (Workbook.Worksheets.Add) или формирование пакета OpenXML. Обходной вариант — сохранить несколько отдельных файлов и объединить их макросом на стороне Excel.
Почему Excel открывает файл с предупреждением о несоответствии формата?
Чаще всего файл сохранён с расширением XLS, хотя фактически записан в другом формате, или наоборот. Убедитесь, что расширение имени файла соответствует переданному значению ТипФайлаТабличногоДокумента: XLSX для XLSX, XLS для старого формата.
Как выгрузить данные в Excel из регламентного задания на сервере?
Формируйте табличный документ в серверной процедуре, сохраняйте его методом Записать() в сетевой каталог или во временное хранилище с последующей записью в нужное место. COM-объект в регламентных заданиях не используйте — на сервере Excel обычно не установлен и не должен быть.
Что делать, если выгрузка большого отчёта занимает много времени?
Основные затраты — построчное обращение к областям табличного документа. Ускорить можно выводом через макет с областью-строкой вместо адресации R1C1, отключением перерисовки и разбиением выгрузки на части. Для очень больших объёмов рассмотрите CSV — он открывается в Excel и формируется на порядок быстрее.
Можно ли создать файл старого формата XLS для совместимости?
Да, передайте в метод Записать() значение ТипФайлаТабличногоДокумента.XLS. Учитывайте ограничение старого формата — около 65 тысяч строк на лист. Если данных может быть больше, используйте XLSX.
Что важно запомнить
Для большинства задач достаточно табличного документа и метода Записать() с типом XLSX — это работает везде и не требует Office. COM-объект нужен для сложного форматирования, но требует установленный Excel и аккуратного завершения процесса. Всегда проверяйте готовый файл: типы чисел, количество строк и открытие без предупреждений.