在pandas read_excel中获取Excel单元格背景颜色?

时间:2017-12-17 16:26:16

标签: python excel pandas

我有一个包含背景颜色的单元格的Excel文件。我正在使用read_excel将该文件读入 pandas 。有没有办法获得细胞的背景颜色?

3 个答案:

答案 0 :(得分:3)

以上建议的解决方案仅适用于xls文件,不适用于xlsx文件。这产生一个NotImplementedError: formatting_info=True not yet implementedXlrd库仍未更新为不适用于xlsx文件。因此,您每次必须Save As并更改格式,这可能对您不起作用。
这是使用xlsx库的openpyxl文件的解决方案。 A2是我们需要找出其颜色代码的单元格。

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

答案 1 :(得分:2)

根据xlrd的建议,强制执行Mark

from xlrd import open_workbook
wb = open_workbook('wb.xls', formatting_info=True)
sheet = wb.sheet_by_name("mysheet")
#create empy colormask matrix
bgcol=np.zeros([sheet.nrows,sheet.ncols])
#cycle through all cells to get colors
for row in range(sheet.nrows):
  for column in range(sheet.ncols):
    cell = sheet.cell(row, column)  
    fmt = wb.xf_list[cell.xf_index]
    bgcol[row,column]=fmt.background.background_colour_index
#return pandas mask of colors
colormask=pd.DataFrame(bgcol) 

然而,必须有更好的方式直接大熊猫...

答案 2 :(得分:0)

我根据this link编辑了上述@csaladenes响应中的代码段,该代码段适用于我的xls文件(原始结果导致所有单元格显示相同的颜色索引,尽管它们具有不同的背景色):< / p>

import xlrd
import numpy as np
wb = xlrd.open_workbook(file, formatting_info=True)
sheet = wb.sheet_by_name("mysheet")
bgcol=np.zeros([sheet.nrows,sheet.ncols])
for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        c = sheet.cell(row, col)
        cif = sheet.cell_xf_index(row, col)
        iif = wb.xf_list[cif]
        cbg = iif.background.pattern_colour_index
        bgcol[row,col] = cbg