You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动