基于Excel单元格颜色添加Status列:代码失效求助
问题排查与修复
核心错误原因
- 使用
ws.iter_rows(values_only=True)时,返回的是单元格值(如字符串、数字)而非单元格对象,因此无法调用cell.fill.fgColor.rgb属性,直接引发属性错误。 - 额外隐患:
next(data)[1:]会丢弃第一列的列名,可能导致DataFrame列数与原始数据不匹配。
修复后的代码
import pandas as pd from openpyxl import load_workbook filename = "Excel_Diff.xlsx" wb = load_workbook(filename) sheet_name = "Sheet1" ws = wb[sheet_name] # 正确读取表头与数据(保留所有列) data = ws.values columns = next(data) df = pd.DataFrame(data, columns=columns) status_column = [] # 从第2行开始遍历数据行(跳过表头),不要加values_only=True,保留单元格对象 for row in ws.iter_rows(min_row=2): # 检查该行所有单元格是否为指定绿色 all_green = all(cell.fill.fgColor.rgb == "FF00FF00" for cell in row) status_column.append("PASS" if all_green else "FAIL") # 将Status列加入DataFrame df["Status"] = status_column # 可选:将结果保存回Excel df.to_excel("Excel_Diff_Result.xlsx", index=False)
关键说明
- 获取单元格对象:去掉
iter_rows的values_only=True参数,确保能访问单元格的格式属性。 - 跳过表头:用
min_row=2从数据行开始判断,避免把表头行的格式纳入判断逻辑。 - 列名完整性:
next(data)保留完整表头,避免列数不匹配问题。 - RGB值验证:如果仍不生效,可通过
print(cell.fill.fgColor.rgb)输出实际单元格的RGB值,确认是否与FF00FF00一致(部分绿色填充的RGB可能不同)。
内容的提问来源于stack exchange,提问作者Priyanka Kumari
相关产品推荐
相关产品推荐

