如何用XlsxWriter基于另一工作表对应值格式化pandas导出的Excel单元格?
没问题,我帮你搞定这个需求!下面是基于XlsxWriter和pandas的完整实现方案,完全符合你的要求:
完整实现方案
步骤说明
- 先准备好对应Sheet1和Sheet2的两个DataFrame
- 使用
pd.ExcelWriter指定XlsxWriter引擎,将两个DataFrame导出到独立工作表 - 定义需要的高亮格式,遍历Sheet2的每个单元格,判断值是否为'a',如果是,就给Sheet1对应位置的单元格应用格式
- 最后保存生成Excel文件
代码示例
import pandas as pd # 1. 创建和你示例一致的两个DataFrame df_sheet1 = pd.DataFrame({ 'A': [1, 0], 'B': [3, 4], 'C': [1, 2] }) df_sheet2 = pd.DataFrame({ 'A': ['a', 'b'], 'B': ['d', 'a'], 'C': ['b', 'a'] }) # 2. 初始化ExcelWriter,指定XlsxWriter作为引擎 with pd.ExcelWriter('highlighted_excel.xlsx', engine='xlsxwriter') as writer: # 将DataFrame写入对应工作表,不包含行索引(和你的示例格式匹配) df_sheet1.to_excel(writer, sheet_name='Sheet1', index=False) df_sheet2.to_excel(writer, sheet_name='Sheet2', index=False) # 获取工作簿和工作表对象,用于自定义格式 workbook = writer.book sheet1 = writer.sheets['Sheet1'] sheet2 = writer.sheets['Sheet2'] # 3. 定义高亮格式:这里用黄色背景,你可以根据需求修改颜色代码 highlight_format = workbook.add_format({'bg_color': '#FFFF00'}) # 4. 遍历Sheet2的所有单元格,匹配值为'a'的位置,给Sheet1对应单元格上色 # 注意:XlsxWriter的行/列索引是从0开始的,pandas导出时表头在row=0,数据从row=1开始 for row in range(df_sheet2.shape[0]): for col in range(df_sheet2.shape[1]): cell_value = df_sheet2.iloc[row, col] if cell_value == 'a': # 获取Sheet1对应位置的数据值 target_value = df_sheet1.iloc[row, col] # 重新写入Sheet1的对应单元格,应用高亮格式 sheet1.write(row + 1, col, target_value, highlight_format) # 运行后会生成highlighted_excel.xlsx,打开后就能看到Sheet1中对应Sheet2为'a'的单元格被黄色高亮
关键细节解释
- 为什么要重新调用
write?:因为pandas把数据写入Excel后,XlsxWriter无法直接修改已有单元格的格式,只能通过重新写入该单元格并指定格式来覆盖(数据不变,只是添加样式) - 行列索引对应:XlsxWriter的
row=0对应Excel显示的第一行(表头),所以DataFrame的第0行数据对应XlsxWriter的row=1;列索引直接对应(col=0是A列,col=1是B列) - 格式自定义:你可以修改
add_format的参数调整样式,比如添加字体颜色、边框:{'bg_color': '#FFFF00', 'font_color': '#FF0000', 'border': 1}
内容的提问来源于stack exchange,提问作者Krzysztof Słowiński




