如何使用python获取xlsx文件中给定单元格的RGB值?
问题描述:
给定一行和一列(加上表名)我需要一种方法来从python脚本中提取excel中报告的单元格的rgb值。如何使用python获取xlsx文件中给定单元格的RGB值?
我一直在使用openpyxl。以下不工作始终:
cell.fill.fgColor.rgb
cell.fill.bgColor.rgb
下面给出错误的值:
openpyxl.styles.colors.COLOR_INDEX[cell.fill.fgColor.index]
openpyxl.styles.colors.COLOR_INDEX[cell.fill.fgColor.index]
所以我在寻找另一种方式来做到这一点。可能的解决方案不必限于openpyxl库,因为我愿意使用另一个库。
答
如果使用Python的Windows,因为它可以访问Excel对象库,并使用其任何方法和属性,例如Workbooks.Open
,Interior.Color
,Workbook.Close
考虑win32com
库。
对RGB value extraction使用这个有趣的链接,可以将VBA翻译为Python。具体而言,VBA的整数除法运算符,反斜线,\
,转化为Python的双斜线,//
和VBA mod
模运算变得Python的%
下面输出黄色单元的RGB。包括两种单元格引用类型。整个例程被包装在一个try/except/finally
中,以关闭后台进程并释放有或没有运行时错误的资源。
import win32com.client as win32
def getRGB(xlCell):
C = xlCell.Interior.Color
R = C % 256
G = C // 256 % 256
B = C // 65536 % 256
return "R={}, G={}, B={}".format(R, G, B)
try:
xlApp = win32.gencache.EnsureDispatch('Excel.Application')
wb = xlApp.Workbooks.Open('C:\\Path\\To\\Workbook.xlsx')
ws = wb.Worksheets('RESULTS')
print(getRGB(ws.Range("A2"))) # A1 Style Reference
# R=255, G=255, B=0 (yellow-colored cell)
print(getRGB(ws.Cells(2,1))) # R1C1 Style Reference
# R=255, G=255, B=0 (yellow-colored cell)
wb.Close(False)
xlApp.Visible = False
except Exception as e:
print(e)
finally:
xlApp.Quit
ws = None
wb = None
xlApp = None
除此之外,待办事项VBA不是MS Excel中的一部分,但(连接到软件默认情况下)的外部组件。这是连接到Excel的对象库的另一种语言,因为任何用Python演示的编程语言都可以为这个库创建一个COM接口。
你是什么意思的“不一致工作”,你会得到什么?如果你有一个新的xlsx文件,单元格颜色是什么? –
有时它会在处理蓝色单元格时具有有效且正确的rgb值,但有时不会。 – Aozturk
在新的xlsx文件中,彩色单元格具有rgb'无',试图访问rgb返回字符串'值必须为'类型。 –
Aozturk