使用Openpyxl的CellIsRule函数时触发AttributeError,求助解决
排查并解决openpyxl条件格式的AttributeError问题
嘿,我来帮你搞定这个报错!先拆解下你代码里触发AttributeError的核心问题,再给你修正后的完整代码:
错误原因分析
你的代码里有几个关键问题,其中直接导致AttributeError的是:
- 错误引用
CellIsRule类:你已经通过from openpyxl.formatting.rule import CellIsRule单独导入了这个类,但后面调用时却写成了formatting.CellIsRule——你的代码里并没有定义formatting这个对象,所以Python找不到这个属性,直接抛出AttributeError。 - 另外还有两个隐性问题,虽然没直接触发当前报错,但也会导致后续运行失败:
- 缺少
os模块的导入,你用了os.chdir()却没写import os。 font参数格式错误:CellIsRule要求传入Font对象,而不是直接传颜色字符串。
- 缺少
修正后的完整代码
import os from openpyxl import load_workbook from openpyxl.formatting.rule import CellIsRule from openpyxl.styles import Font # 切换到目标文件所在目录 os.chdir(r'C:\Users\myfolder') # 加载目标Excel工作簿 wb = load_workbook('myfile.xlsx') ws = wb.active # 定义红色字体样式 red_font = Font(color="#FF0000") # 添加条件格式:S3:S89区域等于1时显示红色字体 ws.conditional_formatting.add( 'S3:S89', CellIsRule( operator='equal', formula=['1'], font=red_font ) ) # 务必保存修改后的工作簿(可以覆盖原文件或保存为新文件) wb.save('myfile_formatted.xlsx')
关键修改说明
- 补充了缺失的
import os和from openpyxl.styles import Font,确保依赖模块都被正确导入。 - 把
formatting.CellIsRule改为直接使用CellIsRule,符合你之前的导入逻辑。 - 创建
Font对象来封装红色字体样式,满足CellIsRule的参数要求。 - 增加了
wb.save()调用,不然你的条件格式修改不会被写入到文件中。
内容的提问来源于stack exchange,提问作者FaCoffee
相关产品推荐
相关产品推荐

