You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python识别Excel单元格值的固定字体颜色并根据颜色赋值?

如何使用Python识别Excel单元格值的固定字体颜色并根据颜色赋值?

你的问题场景

你正在读取Excel单元格的值,需要根据单元格字体颜色(红色#FF0000、绿色#92D050)或者单元格是否为空,给变量Var1分配固定值,但你写的代码没有生效——明明单元格C11是绿色字体,输出结果却是空白。

你尝试的代码:

Var1 = ""
Var2 = ""   
if source_sheet['C11'].value == None:
    Var1 = "No Data"
elif source_sheet['C11'].font.color.rgb == "#92D050":
    Var1 = "Red"
elif source_sheet['C11'].font.color.rgb == "#FF0000":
    Var1 = "Green"

print(Var1)

问题出在哪?

我帮你梳理两个核心问题:

  • 颜色值格式不匹配:用openpyxl(你大概率用的是这个库)获取的字体颜色rgb值,返回的是不带#的大写十六进制字符串,比如绿色对应的是'92D050',而非你写的'#92D050'。而且如果单元格用的是默认字体颜色,font.color会是None,直接访问.rgb还会触发报错,得先判断颜色是否存在。
  • 逻辑搞反了:你代码里把绿色字体对应赋值成了"Red",红色字体对应"Green",这完全颠倒了需求逻辑呀!

修正后的代码

Var1 = ""
Var2 = ""
cell = source_sheet['C11']

# 处理空单元格情况(覆盖None和空字符串两种场景)
if not cell.value:
    Var1 = "No Data"
else:
    # 先判断字体颜色对象是否存在,避免AttributeError
    if cell.font.color is not None:
        color_rgb = cell.font.color.rgb
        if color_rgb == "92D050":
            Var1 = "Green"
        elif color_rgb == "FF0000":
            Var1 = "Red"
    # 如果单元格用的是默认字体颜色(通常是黑色),可添加默认处理逻辑
    else:
        Var1 = "Default Color"

print(Var1)

额外提示

  • 如果你的单元格颜色是通过条件格式设置的,openpyxl默认读取不到这类动态颜色,只能读取直接手动设置的字体颜色。如果是条件格式场景,需要单独解析条件格式规则来获取颜色。
  • 空单元格判断用if not cell.value更稳妥,因为有些空单元格可能返回空字符串""而非None

备注:内容来源于stack exchange,提问作者beruoist

火山引擎 最新活动