使用pd.xlsxwriter基于行内含"Total"的单元格为整行设置条件格式
Pandas XlsxWriter 整行条件格式修复方案
你原有代码存在两处核心问题:
- 未定义
workbook对象,直接调用workbook.add_format会触发变量未定义报错 - 使用单元格级别的包含匹配规则,仅能对命中的单个单元格生效,无法覆盖整行
修复后完整代码
import pandas as pd from datetime import datetime # 修正缩进问题,初始化ExcelWriter writer = pd.ExcelWriter( f"~/{datetime.today().strftime('%Y.%m.%d')} - Report.xlsx", engine="xlsxwriter", date_format="dd/mm/yyyy", datetime_format="dd/mm/yyyy", ) # 补充获取workbook对象(原有代码缺失该行) workbook = writer.book worksheet = writer.sheets["Sheet1"] comma_format = workbook.add_format( {"num_format": "#,###;[Red](#,###);-", "bold": True} ) # 修改条件格式为公式匹配,实现整行命中效果 worksheet.conditional_format( "$A$2:$J$1000", { "type": "formula", "criteria": '=COUNTIF($A2:$J2,"*Total*")>0', "format": comma_format, }, ) # 原有代码缺失的话需补充导出、关闭逻辑 # df.to_excel(writer, sheet_name="Sheet1", index=False) # writer.close()
核心修改说明
- 公式
=COUNTIF($A2:$J2,"*Total*")>0会逐行判断当前行A到J列的所有单元格,只要有任意一个单元格包含Total字符串就满足匹配规则 - 公式中列标识加
$做绝对引用,行号不加$做相对引用,保证每一行的判断逻辑独立,命中后对当前行的A-J所有单元格生效 - 补充了
workbook = writer.book代码,修复原代码中workbook变量未定义的运行报错
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

