Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

8 Июль 2020, 02:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Calc: ConditionalFormat  (Прочитано 944 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 100


« Стартовое сообщение: 22 Март 2020, 03:40 »

При программировании УФ в макросе столкнулся с тем, что в для свойства 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
« Последнее редактирование: 22 Март 2020, 12:40 от eeigor » Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 2 973



« Ответ #1: 22 Март 2020, 10:53 »

А вопрос-то или предложение в чём?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 100


« Ответ #2: 22 Март 2020, 11:16 »

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

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

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

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

$B7 будет исправлен на $B13.
Поэтому вводим $B1, чтобы получить $B7.
« Последнее редактирование: 22 Март 2020, 12:00 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 921


« Ответ #3: 22 Март 2020, 12:13 »

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

С уважением,
Михаил Каганский
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 100


« Ответ #4: 22 Март 2020, 12:39 »

Я перехожу на Calc, изучаю.
Всякая помощь ценна. Спасибо.
Записан
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 921


« Ответ #5: 22 Март 2020, 13:12 »

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

С уважением,
Михаил Каганский
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 2 973



« Ответ #6: 22 Март 2020, 17:03 »

получается X
надеюсь, что это был ИКС?
Записан

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

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 921


« Ответ #7: 22 Март 2020, 17:09 »

надеюсь, что это был ИКС?

LOL  Смеющийся
Записан

С уважением,
Михаил Каганский
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!