I recently needed to process some Excel files in Python. I used the
I needed to take special action if the background colour of a particular cell was solid cyan (
Here is a function that determines if a particular
cell from a given
workbook has a solid cyan background. Note that the cell itself doesn’t contain its own formatting information - it has an “XF style” index, which points into a list of “XF Styles” held by the
workbook.xf_list, which in turn points into tables of colours.
def cell_background_is_cyan ( workbook, cell ): # Returns TRUE if the given cell from the given workbook has a solid cyan RGB (0,255,255) background. # Note that the workbook must be opened with formatting_info = True, i.e. # xlrd.open_workbook(xls_filename, formatting_info=True) assert type (cell) is xlrd.sheet.Cell assert type (workbook) is xlrd.book.Book xf_index = cell.xf_index xf_style = workbook.xf_list[xf_index] xf_background = xf_style.background fill_pattern = xf_background.fill_pattern pattern_colour_index = xf_background.pattern_colour_index background_colour_index = xf_background.background_colour_index pattern_colour = workbook.colour_map[pattern_colour_index] background_colour = workbook.colour_map[background_colour_index] # If the cell has a solid cyan background, then: # - fill_pattern will be 0x01 # - pattern_colour will be cyan (0,255,255) # - background_colour is not used with fill pattern 0x01. (undefined value) # So despite the name, for a solid fill, the background colour is not actually the background colour. # Refer https://www.openoffice.org/sc/excelfileformat.pdf S. 2.5.12 'Patterns for Cell and Chart Background Area' if fill_pattern == 0x01 and pattern_colour == (0,255,255): return True return False