Python:openpyxl如何读取单元格字体颜色

Nor*_*ldt 18 python openpyxl

我试图打印some_cell.font.color.rgb并得到各种结果.

对于一些人,我得到了我想要的东西(比如" FF000000"),但对于其他人,它给了我Value must be type 'basetring'.我假设后者是因为我实际上没有为这些单元格定义字体颜色.

我正在使用openpyxl 2.2.2

roc*_*cky 12

我认为这是openpyxl中的一个错误,我认为你应该在这里报告.

调试以下代码(当然使用trepan3k):

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
c = ws['A4']  # cell gets created here
print(ws['A4'].font.color)
Run Code Online (Sandbox Code Playgroud)

我明白了:

Color(rgb=Value must be type 'str', indexed=Value must be type 'int', auto=Value must be type 'bool', theme=1, tint=0.0, type='theme')
Run Code Online (Sandbox Code Playgroud)

这来自文件中类Typed()的_repr_().未初始化值时会给出此消息.请注意,"indexed"和"auto"也未设置.openpyxl/descriptors/base.py

但是这些应该ws['a4']是在执行访问代码时设置的.

注意:消息中的细微差别:'str'而不是'basestring'可能归因于我使用Python 3或不太可能使用openpyxl 2.2.3

如果我应该在我的示例中添加其他一些额外的代码,那么至少https://openpyxl.readthedocs.org/en/latest/index.html应该表明这一点.

另请参见openpyxl单元格样式未正确报告其中一个开发人员似乎在这么多单词中说同样的事情.

编辑:

其他一些事情可能值得关注.首先,您可以设置一个值然后读取它,例如您可以这样做:

c.font.color.rgb = "FF000000"
Run Code Online (Sandbox Code Playgroud)

其次,如果您c.font.color.rgb在布尔值中测试,它将看起来像已设置的值.那是

if c.font.color: print("yes")
Run Code Online (Sandbox Code Playgroud)

将打印"是".