如何使用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库,因为我愿意使用另一个库。

+0

你是什么意思的“不一致工作”,你会得到什么?如果你有一个新的xlsx文件,单元格颜色是什么? –

+0

有时它会在处理蓝色单元格时具有有效且正确的rgb值,但有时不会。 – Aozturk

+0

在新的xlsx文件中,彩色单元格具有rgb'无',试图访问rgb返回字符串'值必须为'类型。 – Aozturk

如果使用Python的Windows,因为它可以访问Excel对象库,并使用其任何方法和属性,例如Workbooks.OpenInterior.ColorWorkbook.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接口。