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

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

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

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Conditional Formatting  (Прочитано 316 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Al_Ex
Новичок
*
Offline Offline

Сообщений: 30


« Стартовое сообщение: 15 Май 2017, 17:14 »

Всем привет!

У меня в макросе VBA есть такой кусок кода:
Код:
Sub ConditionFormatPassFail()
    With Range("F19:F1048576").FormatConditions.Add(xlCellValue, xlEqual, "Pass")
        .Interior.Color = RGB(198, 239, 206)
        .Font.Color = RGB(0, 97, 0)
    End With
End Sub

Пытаюсь переписать на Python и не нахожу аналога работы с FormatConditions. Уже почти час ищу решение, но кроме использования функции STYLE через интерфейс, ничего интересного не находится, хотя такие вопросы возникают не только у меня.
Кто-то сталкивался с таким и как можно это решить?
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 15 Май 2017, 17:50 »

Пытаюсь переписать на Python и не нахожу аналога работы с FormatConditions.
Аналог на StarBasic можно посмотреть в теме в примере от JohnSUN.
Записан

Al_Ex
Новичок
*
Offline Offline

Сообщений: 30


« Ответ #2: 9 Июнь 2017, 13:28 »

Все равно не могу найти красивое решение...

Решил все же не переписывать код на Python, а использовать макрос, созданный в Экселе, но "подогнанный" под Либру. В общем то все заработало, кроме Conditional Formatting.

Как я понимаю, в Либре программно нет возможности из макроса влиять на эти настройки, как это делает Эксель?

Ладно, решил пойти "простым" путем.
Задал настройки в шаблоне макроса в Экселе.
https://monosnap.com/file/RL8gWqHczMz6c0LE2DkpJwey3ig4CT#

Открыв этот шаблон в Либре видно, что настройки немного изменились. Они "схлопнулись" по условию и изменился диапазон - вместо абсолютного значения всей колонки теперь видно числовые значения с первой до последней. Пока тоже устраивает.
https://monosnap.com/file/CO4OkxarN3eCoQ0VsMnpVO1WinbjVy#

Но вот после того, как макрос отработал, начинается непонятное
https://monosnap.com/file/YZyPnIHPCy0tBweJsgtHf5fi8lNx9P#

Предыдущее условие по колонке F удалено и заменилось на блоки, притом отсутствуют именно те строки, добавленные макросом, по которым должно сработать форматирование. Здесь проблема с коде макроса или в приколы Либры?

"Костыльное" решение - в первом условии поменял руками диапазон F1:F100500.

Но т.к. с файлом будет работать не один человек, то можно это забыть сделать.
Хотелось бы все же как-то один раз сделать такую настройку.
Написать отдельную процедуру можно, но файл будет правиться после выполнения макроса и нужно будет еще раз выполнять эту процедуру по форматированию. И после каждой правки файла опять выполнять...

Что можете посоветовать?
Записан
Al_Ex
Новичок
*
Offline Offline

Сообщений: 30


« Ответ #3: 13 Июнь 2017, 13:13 »

Оказывается, таки можно влиять на форматтинг. Жаль, что никто не подсказал. В общем подсмотрел решение на другом форуме, что типа такого:

Код:
Sub AddConditionalFormatting()
    Call ConditionalFormatting("F1:F1048576", com.sun.star.sheet.ConditionOperator.EQUAL, """PASS""", "ConditionalStyle_3")
    Call ConditionalFormatting("F1:F1048576", com.sun.star.sheet.ConditionOperator.EQUAL, """FAIL""", "ConditionalStyle_4")
End Sub

Sub ConditionalFormatting(strRangeForConditional, strConditionalOperator, strConditionalValue, strConditionalStyle)
    Dim oSheets As Variant
    Dim oObj1 As Variant
    Dim oCellRangeByName As Variant
    Dim oConditionalFormat As Variant
    Dim oNewCondition(3) As New com.sun.star.beans.PropertyValue
    
    oSheets = ThisComponent.getSheets()
    oObj1 = oSheets.getByIndex(0)
    
    oRange = oObj1.getCellRangeByName(strRangeForConditional)
    oConditionalFormat = oRange.ConditionalFormat
    
    oNewCondition(0).Name = "Operator"
    oNewCondition(0).Value = strConditionalOperator
    oNewCondition(1).Name = "Formula1"
    oNewCondition(1).Value = strConditionalValue
    oNewCondition(2).Name = "StyleName"
    oNewCondition(2).Value = strConditionalStyle
    
    oConditionalFormat.addNew (oNewCondition())
    oRange.setPropertyValue("ConditionalFormat", oConditionalFormat)
    
End Sub
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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