Почему при выгрузке отчета из 1С в Excel числа становятся текстом и сбивается формат ячеек?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При сохранении табличного документа 1С в формат XLSX разработчики нередко сталкиваются с ситуацией, когда числовые данные в файле Microsoft Excel начинают определяться как обычный текст. В результате в документе перестают работать стандартные формулы суммирования, пропадает подсветка отрицательных значений красным цветом, а числовое форматирование сбивается.

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

Почему 1С выгружает числовые ячейки в текстовом виде

Проанализируем особенности работы встроенного механизма экспорта 1С в формат XLSX. Поведение платформы зависит от нескольких ключевых факторов:

  1. Отсутствие явной типизации ячейки в табличном документе. Если ячейка выводится исключительно через свойство Текст, а свойство СодержитЗначение выключено (Ложь), платформа пытается определить тип на лету. При этом действует строгое правило: строка интерпретируется как число только в том случае, если для ячейки задано горизонтальное положение «Авто» или «Право». Если ячейка выровнена по центру или по левому краю, Excel получает значение в строковом формате.
  2. Использование неразрывных пробелов при форматировании. Стандартные форматные строки 1С с группировкой разрядов (параметр ЧГ=3,0) подставляют неразрывный пробел (код символа 160). Если ячейка не типизирована как число, Excel не может распознать такую строку как валидное число и оставляет текстовый тип.
  3. Особенности переноса цвета шрифта. Условное оформление или непосредственная раскраска отрицательных чисел в 1С передается в Excel как фиксированный статический цвет ячейки, а не как динамический числовой формат Excel. Если значение внутри ячейки распознано как текст, форматирование чисел в Excel к нему не применяется.

Способ 1. Явная типизация ячеек в программном коде 1С

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


// Настраиваем типизацию ячейки табличного документа
ОбластьЯчейки = ТабличныйДокумент.Область("R5C3");
ОбластьЯчейки.СодержитЗначение = Истина;
ОбластьЯчейки.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2));
ОбластьЯчейки.Значение = Выборка.СуммаОстаток;
ОбластьЯчейки.Формат = "ЧДЦ=2; ЧГ=0";

Посмотрим на ключевые моменты этого кода: установка свойства СодержитЗначение в значение Истина заставляет платформу передавать в файл XLSX нативное числовое значение. В этом случае Excel корректно определяет тип данных даже при центральном или левом выравнивании ячейки.

Способ 2. Настройка свойств ячеек в макете табличного документа

Если отчет или печатная форма формируются на основе макета в конфигураторе, разберем по шагам настройку ячеек без изменения кода:

  1. Открываем нужный макет табличного документа и выделяем область числовых ячеек.
  2. В палитре свойств находим блок Значение и устанавливаем флаг Содержит значение.
  3. В поле Тип значения указываем Число с необходимой длиной и точностью.
  4. В поле Формат задаем требуемое отображение чисел, например: ЧДЦ=2; ЧГ=0.
  5. В блоке Оформление для свойства Горизонтальное положение выбираем значение Право или Авто.

Способ 3. Установка числового формата через COM-объект Excel

В случаях, когда файл Excel уже сформирован и требуется пакетная корректировка форматов или добавление динамического выделения отрицательных чисел красным цветом (формат #,##0.00;[Red]-#,##0.00), применим автоматизацию через COM-соединение.

Рассмотрим пример правильной постобработки диапазона ячеек без медленного построчного перебора:


Попытка
    Экс = Новый COMОбъект("Excel.Application");
    Экс.DisplayAlerts = Ложь;
    Книга = Экс.Workbooks.Open(ПолноеИмяФайла);
    Страница = Книга.WorkSheets(1);
    
    // Задаем числовой формат для нужной колонки или диапазона ячеек
    // Положительные: стандартный вид, Отрицательные: красный цвет со знаком минус
    Страница.Columns("C:D").NumberFormat = "0.00_ ;[Red]-0.00 ";
    
    Книга.Save();
    Книга.Close();
    Экс.Quit();
Исключение
    Если Экс <> Неопределено Тогда
        Экс.Quit();
    КонецЕсли;
    ВызватьИсключение "Ошибка при постобработке файла Excel: " + ОписаниеОшибки();
КонецПопытки;

Важное замечание: использование COMОбъект("Excel.Application") требует наличия установленного пакета Microsoft Office в операционной системе Windows. Данный способ не поддерживается на серверах под управлением Linux.

Таким образом, для надежной выгрузки отчетов в Excel с сохранением типов данных и подсветки отрицательных чисел рекомендуется выполнять явную типизацию числовых ячеек непосредственно в коде или макете 1С.

← На главную