ConditionalFormat -как получить цвет ячейки

Автор Ammaretto, 2 ноября 2020, 07:03

0 Пользователи и 1 гость просматривают эту тему.

Ammaretto

Здравствуйте!
Помогите, пожалуйста.
Задача переписать макрос с exсel на LO
Переносим значения из одного файла в другой. Если ячейка закрашена в серый цвет , то не переносим.
Ячейка может быть закрашена через формат ячейки или условное форматирование(причем для одной ячейки может быть несколько формул в условном форматировании).
В exсel функция  ws2.Cells(i, j).DisplayFormat.Interior.ColorIndex возвращает явный цвет ячейки, с учётом условного форматирования.
В LO функция ws2.GetCellByPosition(j,i).getPropertyValue("CellBackColor") возвращает цвет, который задан через  формат ячейки, не зависимо от условного форматирования.
Подскажите, пожалуйста, есть ли в LO получить явный цвет ячейки, с учетом формата и условного форматирования?
Или хотя бы получить стили из условного форматирования и формулы, может есть функция или свойство, определяющие выполняется ли условное форматирование для данной ячейки?
Нашла только, как задать условное форматирование
REM именах типа UI.
oRange = ThisComponent.Sheets(3).getCellRangeByName("B2:D6")
REM Получим объект проверки
oConFormat = oRange.ConditionalFormat oCondition(0).Name = "Operator"
oCondition(0).Value = com.sun.star.sheet.ConditionOperator.LESS
oCondition(1).Name = "Formula1
oCondition(1).Value = 0
oCondition(2).Name = "StyleName"
oCondition(2).Value = "Heading1"
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

eeigor

#1
Цитата: Ammaretto от  2 ноября 2020, 07:03Или хотя бы получить стили из условного форматирования...
Решение следующее:
На листе (см. скриншоты 1 и 2) ячейка A2 закрашена явно: CellBackColor = RGB(128, 128, 128); CharColor = RGB(255, 255, 255),
а ячейка A3 - неявно (применено условное форматирование по значению ячейки, равным "Grey", через присвоение одноимённого стиля "Grey", в котором фон - серый, а цвет шрифта - белый; однако значения формата, как вы и пишите, через свойства не читаются, равны -1).
На скриншоте 3 мы видим свойства условного формата ячейки A3 (StyleName = "Grey").
Ниже приведён пример получения имени стиля условного формата соответствующей ячейки.
Sub Main
   MsgBox ThisComponent.CurrentController.ActiveSheet _
    .getCellRangeByName("A3").ConditionalFormat.getByIndex(0).getStyleName(), , "Style Name"  'returns "Grey"
End Sub


UPD: Естественно, если для ячейки задан условный формат, то свойство <.ConditionalFormat.Count> будет больше 0.
Иначе код выше для прочей ячейки выдаст ошибку (см. скриншот 4).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Ammaretto

Огромное спасибо за подробный ответ!