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

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

luu

Возникла задача сохранить форматирование ячеек, заданное условным форматирование, как постоянное.
Есть ли возможность получить, например, цвет фона ячейки, задаваемый условным форматированием?
Чтобы потом его можно было напрямую указывать через CellBackColor

sokol92

Я не знаю (на данный момент :) ) в общем случае прямого способа для этого. В Excel можно было бы применить объект Range.DisplayFormat.

Однако LO настолько богат возможностями, что непрямой путь, несомненно, существует.
Владимир.

sokol92

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

kompilainenn

Осталось понять зачем это делать
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

economist

Можно пошукать здесь: Сервис - Инстр разработчика - Выбранное (выделить яч с УФ, например с нужным Стилем ячейки, раскрыть Свойства и найти глазами где этот стиль есть).
Пить не буду коньяка - читану Питоньяка!