Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用XLRD软件包识别Excel表格单元格颜色代码_Python_Excel_Xlrd - Fatal编程技术网

Python 使用XLRD软件包识别Excel表格单元格颜色代码

Python 使用XLRD软件包识别Excel表格单元格颜色代码,python,excel,xlrd,Python,Excel,Xlrd,我正在编写一个python脚本,用它从excel工作表中读取数据。工作表中很少有单元格用不同的颜色高亮显示,我想确定单元格的颜色代码。有办法吗?请举个例子。这里有一种处理方法: import xlrd book = xlrd.open_workbook("sample.xls", formatting_info=True) sheets = book.sheet_names() print "sheets are:", sheets for index, sh in enumerate(shee

我正在编写一个python脚本,用它从excel工作表中读取数据。工作表中很少有单元格用不同的颜色高亮显示,我想确定单元格的颜色代码。有办法吗?请举个例子。

这里有一种处理方法:

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

有关的详细信息。

此函数以元组形式返回单元格背景的rgb值。


JMax建议的解决方案仅适用于
xls
文件,而不适用于
xlsx
文件。这会引发一个
NotImplementedError:formatting\u info=True尚未实现
Xlrd
库仍未更新,无法用于
xlsx
文件。因此,您必须
另存为
,并每次更改可能不适合您的格式
下面是一个使用
openpyxl
库的
xlsx
文件解决方案
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

脚本能够识别颜色代码。但现在我遇到了一个不同的问题。我正在分析的excel工作表有两个空单元格,没有任何额外的格式或颜色,也就是说,两个单元格在位置-(52,4)和(9,4)处都有白色背景,内部没有文本。在第一种情况下,颜色是64,另一种是9。两种相似类型的单元格的颜色代码有何不同?您确定没有一个
空白
和另一个
无填充
?我终于能够区分单元格是否高亮显示。检查是通过查找单元格的颜色映射来完成的。下面是代码:book=xlrd.open\u工作簿(“sample.xls”,格式化信息=1)xfx=sheet.cell\u xf\u index(行、列)xf=book.xf\u list[xfx]bgx=xf.background.pattern\u color\u index color\u map=book.color\u map[bgx]如果color\u map和(color\u map[0]!=255或color\u map[1]!=255或color\u map[2]!=255):#工作表单元格高亮显示其他:#工作表单元格未高亮显示,因此,如果元组中的任何值均不为255,则表示该单元格高亮显示。这会在我处引发一个
NotImplementedError
。可能是因为我打开了
xlsx
而不是
xls
NotImplementedError:formatting\u info=True尚未实现
不幸的是,这只适用于“xls”文件,不适用于“xlsx”文件。有人对“XLSX”文件有任何解决方案吗?您将得到一个“NotImplementedError”。@Heinz我通过改变许多颜色对它进行了多个测试。效果很好。你能分享你的例子吗?
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