Each Answer to this Q is separated by one/two green lines.
I am writing a python script to read data from an excel sheet using xlrd. Few of the cells of the the work sheet are highlighted with different color and I want to identify the color code of the cell. Is there any way to do that ? An example would be really appreciated.
Here is one way to handle this:
import xlrd book = xlrd.open_workbook("sample.xls", formatting_info=True) sheets = book.sheet_names() print "sheets are:", sheets for 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
A2 is the cell whose color code we need to find out.
import openpyxl from openpyxl import load_workbook excel_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 color print ('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
# say you have an Excel file called workbook and inside it there is a worksheet called worksheet # inside that worksheet is cell say C1 that is highlighted and you want to get the color value of the highlighted cell # Trying the openpyxl package import openpyxl # Importing all modules from the openpyxl package from openpyxl import * # reading ev2 excel workbook through load_workbook function workbook = load_workbook("C:PATHTO/workbook.xlsx") # Accessing existing worksheets worksheet = workbook ["worksheet"] ## METHOD1 ## # Getting the highlight property of the cell highlight=str(worksheet ['C1'].fill) # Printing out the value of the color index=int(highlight.find("rgb='")) print(highlight[index+5:index+13]) ## METHOD 2 ## print(worksheet ['C11'].fill.start_color.index)