При сохранении табличного документа 1С в формат XLSX разработчики нередко сталкиваются с ситуацией, когда числовые данные в файле Microsoft Excel начинают определяться как обычный текст. В результате в документе перестают работать стандартные формулы суммирования, пропадает подсветка отрицательных значений красным цветом, а числовое форматирование сбивается.
Разберем детально механизм формирования файлов Excel платформой 1С:Предприятие, выясним причину такого поведения и рассмотрим надежные способы решения задачи как средствами платформы, так и через программную постобработку.
Проанализируем особенности работы встроенного механизма экспорта 1С в формат XLSX. Поведение платформы зависит от нескольких ключевых факторов:
Текст, а свойство СодержитЗначение выключено (Ложь), платформа пытается определить тип на лету. При этом действует строгое правило: строка интерпретируется как число только в том случае, если для ячейки задано горизонтальное положение «Авто» или «Право». Если ячейка выровнена по центру или по левому краю, Excel получает значение в строковом формате.ЧГ=3,0) подставляют неразрывный пробел (код символа 160). Если ячейка не типизирована как число, Excel не может распознать такую строку как валидное число и оставляет текстовый тип.Рассмотрим наиболее правильный и универсальный способ формирования табличного документа. Чтобы экспорт в Excel гарантированно определял числовые данные независимо от выравнивания, необходимо задавать тип и значение ячейки явно в коде формирования отчета:
// Настраиваем типизацию ячейки табличного документа
ОбластьЯчейки = ТабличныйДокумент.Область("R5C3");
ОбластьЯчейки.СодержитЗначение = Истина;
ОбластьЯчейки.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2));
ОбластьЯчейки.Значение = Выборка.СуммаОстаток;
ОбластьЯчейки.Формат = "ЧДЦ=2; ЧГ=0";
Посмотрим на ключевые моменты этого кода: установка свойства СодержитЗначение в значение Истина заставляет платформу передавать в файл XLSX нативное числовое значение. В этом случае Excel корректно определяет тип данных даже при центральном или левом выравнивании ячейки.
Если отчет или печатная форма формируются на основе макета в конфигураторе, разберем по шагам настройку ячеек без изменения кода:
Число с необходимой длиной и точностью.ЧДЦ=2; ЧГ=0.Право или Авто.В случаях, когда файл 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С.