Выгрузка в Excel. Группировка строк, установка цвета

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

При выгрузке табличного документа в excel иногда требуется сохранить структуру и форматирование, аналогичное 1С. К сожалению, не все свойства таб.дока доступны стандартными методами, и тогда приходится придумывать «нечто». На оригинальность, конечно, не претендую, просто оформил в виде маленькой обработочки.

1. Области объединенных ячеек.

Чтобы объединить / разъединить области ячеек, у них есть соответствующие методы, но найти метод, который возвращает нам список этих областей, не удалось. Для поиска этих областей обходим все ячейки и сравниваем Лево/Право и Верх/Низ каждой (оказывается, у одной ячейки они могут быть не равны). 

Если текОбласть.Лево <> текОбласть.Право ИЛИ текОбласть.Верх <> текОбласть.Низ Тогда
//
КонецЕсли;

2. Группировка строк.

При выводе данных в таб.док, мы можем группировать строки по нашему усмотрению, но в готовом документе получить список этих самых групп уже не представляется возможным. В этом случае нам поможет сериализация в xml.

СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТабДок, "item");

После чего, используя ПостроительDOM, можем успешно прочитать созданный файл и, находя узлы с именами «b» и «e», определить границы группируемых строк.

 

3. Цвет.

Казалось бы, что может быть проще? Получили цвет из свойства ЦветФона, записали в ЯчейкаЕ.Interior.Color.

Но, оказывается, excel не воспринимает цвета в hex формате, да еще и цвет в 1С может скрывать от нас его сущность, возвращая -1 в rgb свойствах.

Первую проблему можно решить, применив (для определения кода цвета в эксель) чудо-формулу: RGB_B*256*256 + RGB_G*256 + RGB_R.

Определить rgb составляющие посредством сериализации не представляется возможным. Поэтому для цветов вида НЕ Абсолютный, приходится формировать вспомогательный табличный документ и выгружать его во временный xls файл. Также можно выгружать в html файл и в тексте искать код установки свойства background-color, но для webцветов платформа выгружает не hex значение, а его предопределенное имя, что не подходит для нашего случая. Поэтому используем временный xls и кэширование ранее выгруженых.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *