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

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

Как установить формат ячейки Excel в 1С

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

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

Выбор способа зависит от условий. Табличный документ проще, не требует установленного Excel на компьютере или сервере, но его возможности по форматированию ограничены возможностями самого табличного документа 1С. COM-подключение даёт полный доступ к форматам Excel (NumberFormat, условное форматирование, типы данных), однако требует установленного Microsoft Excel и работает медленнее на больших объёмах.

Ниже разобраны оба подхода с примерами кода, типичными ошибками и способами проверки результата. Примеры написаны на встроенном языке 1С и подходят для управляемых и обычных форм.

Какие способы задания формата существуют и когда какой выбирать

Первый способ — формирование ТабличногоДокумента с последующим сохранением его в формате XLSX или XLS методом Записать(). У области табличного документа есть свойство Формат, которое принимает строку формата 1С (например, ЧДЦ=2 для чисел или ДФ=dd.MM.yyyy для дат). При сохранении платформа конвертирует формат в ближайший аналог Excel.

Второй способ — прямое управление Excel через COM: создаётся объект Excel.Application, открывается книга, и для нужных ячеек задаётся свойство NumberFormat со строкой формата в нотации Excel (например, "0.00", "DD.MM.YYYY", "@" для текста). Этот способ даёт точный контроль, но требует установленного Excel и прав на запуск COM-сервера.

Третий, частный случай — установка формата при чтении файла Excel: здесь формат не задаётся, а учитывается, потому что от него зависит, как 1С интерпретирует значение ячейки (число, дату или строку).

Сравнение вариантов

ТабличныйДокумент + свойство Формат

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

COM-объект Excel.Application

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

Чтение готового файла

Формат не задаётся, а анализируется. Подходит для загрузки прайсов и выгрузок из сторонних систем.

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

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

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

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

// Заголовки

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

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

// Данные

ТабДок.Область("R2C1").Текст = Формат(ТекущаяДатаСеанса(), "ДЛФ=D");

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

// Форматы областей

ТабДок.Область("R2C1").Формат = "ДФ=dd.MM.yyyy";

ТабДок.Область("R2C2").Формат = "ЧДЦ=2; ЧРД=.";

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

Чтобы число попало в Excel именно как число, а не как текст, в ячейку нужно записывать значение числового типа, а не строку. Если присвоить свойству Текст строку "1234,5", Excel воспримет её как текст, и формат числа не сработает. Для числовых значений корректнее использовать свойство области через ТабДок.Область(...).Текст с числом — платформа сама сериализует значение.

Строка формата строится по правилам функции Формат() встроенного языка: ЧЦ — общая длина, ЧДЦ — число десятичных знаков, ЧРД — разделитель дробной части, ЧН — представление нуля, ДФ — формат даты. Платформа при записи в XLSX подбирает ближайший формат Excel, поэтому экзотические конструкции могут быть преобразованы с потерями.

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

Установка формата через COM-объект Excel

Когда нужен точный формат Excel — например, денежный с символом валюты, процентный или текстовый для кодов с ведущими нулями — используется прямое подключение к Excel. Свойство ячейки называется NumberFormat и принимает строку формата в нотации Excel.

Попытка

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

Исключение

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

Возврат;

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

Excel.Visible = Ложь;

Excel.DisplayAlerts = Ложь;

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

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

// Текстовый формат для кода с ведущими нулями

Лист.Cells(1, 1).NumberFormat = "@";

Лист.Cells(1, 1).Value = "00123";

// Число с двумя знаками и разделителем тысяч

Лист.Cells(2, 1).NumberFormat = "#,##0.00";

Лист.Cells(2, 1).Value = 1234567.89;

// Дата

Лист.Cells(3, 1).NumberFormat = "DD.MM.YYYY";

Лист.Cells(3, 1).Value = ТекущаяДатаСеанса();

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

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

Excel.Quit();

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

Важный нюанс: формат ячейки нужно устанавливать до записи значения, если речь идёт о текстовом формате. Если сначала записать строку "00123" в ячейку общего формата, Excel преобразует её в число 123, и последующая смена формата на текстовый ведущие нули не вернёт. Для чисел и дат порядок менее критичен.

Строки формата Excel регистрозависимы в части кодов даты и локали: DD.MM.YYYY корректно работает в русской локали, в английской может потребоваться DD/MM/YYYY с учётом региональных настроек. Для переносимых решений даты надёжнее записывать как значения даты и задавать только отображение.

Учёт формата ячейки при загрузке данных из Excel

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

Через COM доступно свойство NumberFormat для чтения: по нему можно определить, что ячейка содержит дату, и сконвертировать значение. Надёжный приём — читать Cells.Value2 (сырое значение) и при необходимости преобразовывать число в дату встроенными средствами 1С, зная базовую дату Excel.

Другая частая ситуация — коды и артикулы с ведущими нулями. Если в файле ячейка имеет числовой формат, нули уже потеряны на стороне Excel, и никакая обработка в 1С их не восстановит. В таком случае источник данных нужно исправлять: просить поставщика выгружать код как текст или использовать формат CSV с явным указанием типов.

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

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

Вторая ошибка — установка текстового формата после записи значения через COM. Excel не переинтерпретирует уже записанное значение при смене формата, поэтому NumberFormat = "@" нужно ставить заранее для всего диапазона, куда пойдут коды и артикулы.

Третья ошибка — незавершённые COM-процессы. Если код падает с исключением между Workbooks.Add() и Quit(), процесс EXCEL.EXE остаётся в памяти и держит файл. Оборачивайте работу с книгой в попытку-исключение с гарантированным закрытием в блоке исключения.

Типичные ошибки
01
Запись числа как строки — в Excel значение становится текстом, формулы и итоги не работают
02
Формат @ ставится после записи значения — ведущие нули уже потеряны, смена формата их не возвращает
03
Нет Quit() при ошибке — процесс EXCEL.EXE зависает и блокирует файл выгрузки
04
Использование COM на сервере — нестабильная работа и отказы под нагрузкой, хотя табличный документ решает задачу
05
Ожидание, что формат 1С перенесётся в Excel один в один — платформа подбирает ближайший аналог, сложные форматы упрощаются

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

После выгрузки откройте файл в Excel и выделите контрольные ячейки. Нажмите Ctrl+1 — в диалоге «Формат ячеек» виден фактический формат. Для чисел проверьте, что в строке формул отображается значение без кавычек, а в статусной строке при выделении диапазона считается сумма — это признак того, что значения числовые.

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

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

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

Сумма в статусной строке Excel при выделении числового столбца
Норма

Сумма и среднее считаются

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

Показывается только количество — значения сохранены как текст

Формат ячейки с кодом (Ctrl+1)
Норма

Формат «Текстовый», ведущие нули на месте

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

Формат «Числовой», нули потеряны

Столбец с датами
Норма

Сортировка идёт по хронологии, формат — дата

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

Сортировка алфавитная или отображаются числа вида 45000

Процессы после COM-выгрузки
Норма

EXCEL.EXE завершён после Quit()

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

Процесс висит в диспетчере задач, файл заблокирован

FAQ

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

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

Можно ли задать формат ячейки Excel на сервере 1С без установленного Excel?

Да, через табличный документ: свойство Формат области и сохранение методом Записать в XLSX. Возможности ограничены форматами, которые умеет конвертировать платформа, но для чисел, дат и базового оформления этого достаточно. COM-объект Excel без установленного приложения работать не будет.

Почему после выгрузки артикул «00123» превратился в 123?

Ячейка имела общий или числовой формат, и Excel преобразовал строку в число. При выгрузке через COM задайте NumberFormat = "@" до записи значения. При выгрузке через табличный документ записывайте значение как текст и убедитесь, что область не имеет числового формата.

Какой формат указать для даты, чтобы она отображалась как дд.мм.гггг?

В табличном документе — строка ДФ=dd.MM.yyyy в свойстве Формат области. Через COM — NumberFormat = "DD.MM.YYYY" для русской локали Excel. Значение в ячейку записывайте как дату, а не как строку, иначе сортировка и фильтры по датам работать не будут.

Что делать, если процесс EXCEL.EXE остаётся в памяти после выгрузки?

Убедитесь, что вызываются Книга.Close(Ложь), Excel.Quit() и обнуление переменной Excel. Оберните код в попытку-исключение и выполняйте закрытие в обеих ветках. Если процессы накопились, завершите их вручную через диспетчер задач, предварительно убедившись, что пользователи не работают с Excel на этом компьютере.

Можно ли применить условное форматирование Excel из 1С?

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

Итог

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

На сервере и без Excel используйте табличный документ со свойством Формат области, для точного контроля — COM-объект со свойством NumberFormat, задаваемым до записи значения. Числа записывайте числами, коды с нулями — в текстовый формат заранее, COM-процессы всегда завершайте через Quit().