0

After trying to use openpyxl to try to know which styles is applied in order to get the the actual background color of a cell after the conditional formatting has been applied and realized that I would have to write a formula parser (and it makes no sense to re-write excel and I would have to deal with chained formula cell values, etc).

I am now reaching the PyUno interface to get access via a libreoffice instance running headless and reaching the XSheetConditionalEntry object trough the PyOO interface.

Looks that I have reached the exact same place, I have the cell and the formula; but no way of knowing which of the conditional formatting styles applies or not:

def processFile(filename):
    soffice = subprocess.Popen(officeCommand, shell=True)
    desktop = pyoo.Desktop(pipe='hello')
    doc = desktop.open_spreadsheet(filename)
    sheet = doc.sheets['STOP FS 2023']
    cell = sheet[5,24]
    cellUno = cell._get_target()
    print(f"{cellUno.getPropertyValue('CellBackColor')=}")
    print(f"{cellUno.getPropertyValue('CellStyle')=}")
    for currentConditionalFormat in cellUno.getPropertyValue('ConditionalFormat'):
        print(f"{currentConditionalFormat.getStyleName()=}")
        print(f"{currentConditionalFormat.getOperator()=}")

getting the following results

cellUno.getPropertyValue('CellBackColor')=-1
cellUno.getPropertyValue('CellStyle')='Default'
currentConditionalFormat.getStyleName()='ConditionalStyle_4'
currentConditionalFormat.getOperator()=<Enum instance com.sun.star.sheet.ConditionOperator ('BETWEEN')>
currentConditionalFormat.getStyleName()='ConditionalStyle_3'
currentConditionalFormat.getOperator()=<Enum instance com.sun.star.sheet.ConditionOperator ('NONE')>
currentConditionalFormat.getStyleName()='ConditionalStyle_2'
currentConditionalFormat.getOperator()=<Enum instance com.sun.star.sheet.ConditionOperator ('NONE')>
currentConditionalFormat.getStyleName()='ConditionalStyle_1'
currentConditionalFormat.getOperator()=<Enum instance com.sun.star.sheet.ConditionOperator ('NONE')>

The style that is being applied is the ConditoinalStyle_3

This post has helped a bit but it is intended to work inside of a macro, and looks like heir forum sign up is broken, as I would would have tried to ask the same question over there.

Charlie Clark
  • 18,477
  • 4
  • 49
  • 55
Salvador Aceves
  • 348
  • 1
  • 4
  • 13

0 Answers0