Identifying Excel Sheet cell color code using XLRD package Identifying Excel Sheet cell color code using XLRD package python python

Identifying Excel Sheet cell color code using XLRD package


Here is one way to handle this:

import xlrdbook = xlrd.open_workbook("sample.xls", formatting_info=True)sheets = book.sheet_names()print "sheets are:", sheetsfor index, sh in enumerate(sheets):    sheet = book.sheet_by_index(index)    print "Sheet:", sheet.name    rows, cols = sheet.nrows, sheet.ncols    print "Number of rows: %s   Number of cols: %s" % (rows, cols)    for row in range(rows):        for col in range(cols):            print "row, col is:", row+1, col+1,            thecell = sheet.cell(row, col)                  # could get 'dump', 'value', 'xf_index'            print thecell.value,            xfx = sheet.cell_xf_index(row, col)            xf = book.xf_list[xfx]            bgx = xf.background.pattern_colour_index            print bgx

More info on the Python-Excel Google Group.


The Solution suggested by JMax works only for xls file, not for xlsx file. This raises a NotImplementedError: formatting_info=True not yet implemented. Xlrd library is still not updated to work for xlsx files. So you have to Save As and change the format every time which may not work for you.
Here is a solution for xlsx files using openpyxl library. A2 is the cell whose color code we need to find out.

import openpyxlfrom openpyxl import load_workbookexcel_file = 'color_codes.xlsx' wb = load_workbook(excel_file, data_only = True)sh = wb['Sheet1']color_in_hex = sh['A2'].fill.start_color.index # this gives you Hexadecimal value of the colorprint ('HEX =',color_in_hex) print('RGB =', tuple(int(color_in_hex[i:i+2], 16) for i in (0, 2, 4))) # Color in RGB


This function returns cell background's rgb value in tuple.

def getBGColor(book, sheet, row, col):    xfx = sheet.cell_xf_index(row, col)    xf = book.xf_list[xfx]    bgx = xf.background.pattern_colour_index    pattern_colour = book.colour_map[bgx]    #Actually, despite the name, the background colour is not the background colour.    #background_colour_index = xf.background.background_colour_index    #background_colour = book.colour_map[background_colour_index]    return pattern_colour