繁体   English   中英

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

[英]Python: openpyxl how to read a cell font color

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

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

我正在使用 openpyxl 2.2.2

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

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

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

我得到:

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')

这来自文件openpyxl/descriptors/base.py Typed()类的_repr_() 当值尚未初始化时会给出此消息。 请注意,“索引”和“自动”也尚未设置。

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

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

如果我应该在示例中添加其他一些附加代码,那么至少https://openpyxl.readthedocs.org/en/latest/index.html应该指出这一点。

另请参阅openpyxl 单元格样式未正确报告其中一位开发人员似乎用很多词说同样的话。

编辑

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

c.font.color.rgb = "FF000000"

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

if c.font.color: print("yes")

将打印“是”。

我记得前段时间潜入 openpyxl 源代码以尝试解决一些样式问题。 如果您要打开一个预先存在的 Excel 文件,则只有包含内容的单元格才会被设置样式。 例如,如果您有一个 .xlsx,其中 A:A 以黄色突出显示,但只有 A1 包含任何文本,则 openpyxl 将没有可用于 A2 的突出显示信息。 如果(使用 openpyxl)您将一些数据记录到 A2,那么它将启动没有样式的单元格,并且最终您的 A 列除了 A2 之外的所有地方都是黄色的。

我遇到的困难是对单元格创建进行猴子修补以确定工作表是否具有应在继承基础上维护的样式。 如果你有 A:A 风格的粗边框和 B:B 风格的细边框,你从哪个继承?

可能的替代解决方案是测试cell.colorcell.color.rgb的类型。

以下测试似乎给出了其颜色设置的单元格:

if cl.font.color != None and type(cl.font.color.rgb) == str:
   # where cl =  cell of interest
   rbg = cl.font.color.rgb  

当使用样式时,似乎cell.font.colorNone并且type(cell.color.rgb)<class 'openpyxl.styles.colors.RGB'>时未设置颜色。

注意:此解决方案尚未经过彻底测试,可能不适用于所有情况。

我以这种方式进行了检查:

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
c = ws['A1']
if 'rgb' in c.font.color.__dict__:
    print(c.font.color.rgb)
else:
    print('None')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM