
本文介绍使用openpyxl读取excel单元格字体颜色(如红色#ff0000、绿色#92d050)的正确方法,指出常见rgb格式误区,并提供可直接运行的代码示例与关键注意事项。
本文介绍使用openpyxl读取excel单元格字体颜色(如红色#ff0000、绿色#92d050)的正确方法,指出常见rgb格式误区,并提供可直接运行的代码示例与关键注意事项。
在使用 openpyxl 读取Excel单元格字体颜色时,一个极易被忽略的关键点是:cell.font.color.rgb 返回的是8位ARGB格式字符串(Alpha-Red-Green-Blue),而非标准6位RGB十六进制值。例如,绿色 #92D050 在Excel中实际存储为 "FF92D050"(前两位 FF 表示不透明度Alpha),红色 #FF0000 对应 "FFFF0000"。若直接比对 "#92D050" 或 "#FF0000",条件永远不成立,导致变量未被赋值而输出为空——这正是原代码失效的根本原因。
以下为修正后的完整逻辑示例(兼容空单元格、绿色、红色三种状态):
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
source_sheet = wb.active
cell = source_sheet['C11']
Var1 = "No Data" # 默认值,避免未覆盖情况
if cell.value is None:
Var1 = "No Data"
elif cell.font.color and cell.font.color.rgb == "FF92D050": # 绿色字体
Var1 = "Green"
elif cell.font.color and cell.font.color.rgb == "FFFF0000": # 红色字体
Var1 = "Red"
else:
Var1 = "Other Color or No Color"
print(Var1) # 输出:Green(当C11为绿色数字时)
⚠️ 重要注意事项:
-
务必检查
cell.font.color是否存在:空单元格或无显式颜色设置的单元格,cell.font.color可能为None,直接访问.rgb会抛出AttributeError; -
颜色值区分大小写:
openpyxl返回的rgb字符串全为大写(如"FF92D050"),建议统一用大写比对; -
默认颜色不触发匹配:Excel中未手动设置颜色的单元格,其
font.color通常为None,不会匹配任何预设RGB值; -
验证真实颜色值:首次调试时,推荐先打印
cell.font.color.rgb查看实际值:print(repr(cell.font.color.rgb))—— 避免凭经验猜测格式。
通过遵循ARGB格式规范、增加空值防护及实测校验,即可稳定实现基于字体颜色的业务逻辑分支,适用于数据质量标记、状态标识提取等典型场景。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











