如何使用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




