
本文介绍使用 openpyxl 读取 Excel 单元格字体颜色(如红色 #FF0000、绿色 #92D050)的正确方法,指出常见 RGB 格式误区,并提供可直接运行的判断逻辑与实用注意事项。
本文介绍使用 openpyxl 读取 excel 单元格字体颜色(如红色 `#ff0000`、绿色 `#92d050`)的正确方法,指出常见 rgb 格式误区,并提供可直接运行的判断逻辑与实用注意事项。
在使用 openpyxl 处理 Excel 文件时,通过 .font.color.rgb 获取单元格字体颜色看似简单,但极易因颜色编码格式不匹配导致判断失效——这正是原代码输出为空的根本原因。
openpyxl 中 Color.rgb 属性返回的是 8 位 ARGB 格式字符串(Alpha-Red-Green-Blue),而非常见的 6 位 RGB(如 #92D050)。例如:
- 纯红色字体实际返回
"FFFF0000"(Alpha =FF,R =FF,G =00,B =00) - 绿色
#92D050对应"FF92D050"(Alpha 默认不透明FF前缀)
因此,直接比对 "#92D050" 或 "#FF0000" 必然失败。正确做法是:去除 # 符号,并补全 Alpha 通道为 FF。
以下为健壮、可复用的判断逻辑示例:
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
source_sheet = wb.active
cell = source_sheet['C11']
value = cell.value
color_rgb = cell.font.color.rgb if cell.font.color and cell.font.color.rgb else None
Var1 = "No Data"
if value is None:
Var1 = "No Data"
elif color_rgb == "FFFF0000":
Var1 = "Red"
elif color_rgb == "FF92D050":
Var1 = "Green"
else:
Var1 = "Other Color" # 可选:处理未定义颜色或默认色(如黑色)
print(Var1) # 输出:Green(当 C11 为绿色字体时)
⚠️ 关键注意事项:
-
cell.font.color可能为None(例如未显式设置颜色,或使用主题色/自动色),务必先判空; - 使用
is None而非== None判断单元格值是否为空; - 若需支持更多颜色,建议构建映射字典提升可维护性:
COLOR_MAP = { "FFFF0000": "Red", "FF92D050": "Green", "FF000000": "Black", "FFFFFFFF": "White" } Var1 = COLOR_MAP.get(color_rgb, "Unknown") -
openpyxl仅支持.xlsx/.xlsm等基于 XML 的格式;.xls文件需先转换或改用xlrd(旧版)或pandas+xlrd>=2.0(不推荐,已弃用)。
掌握 ARGB 编码规则与防御性判断,即可稳定实现基于字体颜色的业务逻辑分支,适用于数据质量校验、状态标记解析等典型场景。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











