[Решено] Calc: ConditionalFormat

Автор eeigor, 22 марта 2020, 03:40

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

eeigor

При программировании УФ в макросе столкнулся с тем, что в для свойства Formula1 надо задавать адрес первой ячейки с индексом 1.
Поясню.
Например, 1-я ячейка диапазона, для которого мы задаем УФ, начинается со строки 7, а условие строим для столбца B. То есть адрес первой ячейки будет "$B7". Ссылка смешанная: столбец закреплен, строка будет текущая.
Если мы вводим такую формулу в окне УФ, то мы сошлёмся именно на этот адрес ячейки - $B7.
Однако в коде надо указывать другой адрес: $B1 - строка всегда первая!
А LO Calc сам добавляет 6 строк к адресу (смещение верхней строки выбранного диапазона от верхнего края листа), чтобы получить адрес $B7.

Не логично!.. И не последовательно.

Пример:
   oRange = oSheet.getCellRangeByPosition(1, 6, 1, nEndRow)  'ByName("B7:I" & nEndRow + 1)
   oCondFormat = oRange.ConditionalFormat

   args(0).Name = "Operator"
   args(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA

   args(1).Name = "Formula1"
   args(1).Value = "$B1=""Строка критерия"""  'BUG: с относительной ссылкой на строку 1, а записано будет: $B7="Строка критерия"

   args(2).Name = "StyleName"
   args(2).Value = "ConditionalStyle_1"

   oCondFormat.addNew(args())
   oRange.ConditionalFormat = oCondFormat
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

kompilainenn

А вопрос-то или предложение в чём?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

#2
Предложение.
Вводить надо в данном примере не $B1, а $B7. Или нет: индекс строки – всегда первый?

Не понимаю: почему через интерфейс пользователя (окно УФ) я должен ввести в соотв. поле адрес первой ячейки $B7 или выбрать эту ячейку мышью (делать ссылку на строку относительной надо всё равно ручками), а в коде ручками – $B1 ?!

Другой аргумент:
мы вводим значение формулы в виде текстовой строки с адресом внутри, а Calc залезает в строку и корректирует её.

args(1).Name = "Formula1"
args(1).Value = "$B7=""Строка критерия"""

$B7 будет исправлен на $B13.
Поэтому вводим $B1, чтобы получить $B7.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

Проблема не в нелогичности, а в неправильном использовании. При создании CF не был задан параметр SourcePosition, поэтому и задаётся формат относительно умолчательной позиции A1 (ячейка с координатами 0,0).
С уважением,
Михаил Каганский

eeigor

Я перехожу на Calc, изучаю.
Всякая помощь ценна. Спасибо.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

... поэтому логичнее вместо "я тут заметил, как хреново в ЛО сделано X" писать "я делаю 1-2-3 и получается X. ЧЯДНТ?"
С уважением,
Михаил Каганский

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

С уважением,
Михаил Каганский