
使用 openpyxl 读取 Excel 单元格字体颜色时,需注意其 rgb 属性返回的是 8 位 ARGB 格式(含透明度通道),而非标准的 6 位 RGB 值,直接比对 "#92D050" 或 "#FF0000" 会导致匹配失败。
使用 openpyxl 读取 excel 单元格字体颜色时,需注意其 `rgb` 属性返回的是 8 位 argb 格式(含透明度通道),而非标准的 6 位 rgb 值,直接比对 `"#92d050"` 或 `"#ff0000"` 会导致匹配失败。
在 Python 中通过 openpyxl 操作 Excel 文件时,若需根据单元格字体颜色(如红色、绿色)动态赋值,关键在于正确解析 Cell.font.color.rgb 的返回格式。该属性返回的是 8 字符十六进制字符串,格式为 AARRGGBB(Alpha-Red-Green-Blue),其中 Alpha 通道默认为 FF(完全不透明)。因此:
- 绿色
#92D050→ 实际返回"FF92D050" - 红色
#FF0000→ 实际返回"FFFF0000" - 注意:不带
#符号,且为大写
以下是完整、健壮的实现示例:
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
source_sheet = wb["Sheet1"]
cell = source_sheet["C11"]
value = cell.value
font_color = cell.font.color
Var1 = "No Data"
if value is None:
Var1 = "No Data"
elif font_color and font_color.rgb == "FF92D050": # 绿色:#92D050
Var1 = "Green"
elif font_color and font_color.rgb == "FFFF0000": # 红色:#FF0000
Var1 = "Red"
else:
Var1 = "Other Color or Default"
print(Var1) # 输出:Green(当 C11 为绿色数字时)
⚠️ 重要注意事项:
- 必须检查
font_color是否存在(空单元格或无显式格式时可能为None),否则访问.rgb会抛出AttributeError; - 使用
is None而非== None判断空值,符合 Python 最佳实践; - 若 Excel 中颜色由条件格式(Conditional Formatting)应用,
openpyxl无法读取——它仅支持直接应用的字体颜色(即手动设置或普通样式); - 颜色值区分大小写,建议统一用大写字符串比对(如
"FF92D050"); - 调试时可先打印
cell.font.color.rgb查看实际值:print(repr(cell.font.color.rgb)),避免硬编码错误。
总结:字体颜色识别依赖于理解 openpyxl 的 ARGB 表示规范。只要正确处理 None 安全性、ARGB 格式及条件格式限制,即可稳定实现基于颜色的业务逻辑分支。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











