You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas结合XlsxWriter导出Excel时如何按列名设置首行单元格背景色

实现方法

首先修正原代码的一个错误:xlsxwriter引擎下,writer.close()方法会自动完成文件保存操作,先调用close再调用save会触发IO报错,移除多余的writer.save()调用即可。

实现表头按列名上色的逻辑非常简单,核心是利用xlsxwriter的格式对象,在关闭写入器之前定位到目标表头单元格,写入带背景色格式的内容即可:

  • 先建立DataFrame列名和列索引的映射关系,由于设置了index=False,列从0号索引开始依次对应Excel的A、B、C...列,表头固定在第0行(Excel界面显示的第1行)
  • 遍历定义的颜色字典,为每个颜色创建专属的单元格格式对象
  • 定位到对应列的表头位置,写入列名并绑定对应背景色格式

完整可运行代码

import pandas as pd

writer = pd.ExcelWriter('data.xlsx', engine='xlsxwriter')
data = pd.DataFrame(
    data={
        'val1': [True, False], 
        'val2': [False, True], 
        'val3': [True, True], 
        'val4': [True, False], 
        'val5': [True, True],
        'val6': [False, False]
    },
    index=pd.Series([1, 2], name='index')
)
data.to_excel(writer, index=False, sheet_name='Sheet1')
workbook = writer.book
ws = writer.sheets['Sheet1']

# 列名-背景色映射规则
colors = {
    'val3': '#FFFF00',
    'val4': '#DCE6F1',
    'val6': '#FDE9D9'
}

# 生成列名到列位置的索引映射
col_position = {col: idx for idx, col in enumerate(data.columns)}
header_row = 0

# 逐个设置目标列表头样式
for col_name, hex_color in colors.items():
    # 创建单元格格式,设置背景色
    header_fmt = workbook.add_format()
    header_fmt.set_bg_color(hex_color)
    # 如果需要和默认表头样式一致,可以补充加粗、居中配置
    # header_fmt.set_bold()
    # header_fmt.set_align('center')
    
    # 定位到对应表头单元格,写入带格式的列名
    target_col = col_position[col_name]
    ws.write(header_row, target_col, col_name, header_fmt)

# 关闭写入器,自动保存文件
writer.close()

效果说明

运行代码后导出的Excel中,val3列表头为黄色、val4列表头为浅灰蓝色、val6列表头为浅橙色,其余列表头保持默认样式,和预期效果完全一致。

内容的提问来源于stack exchange,提问作者bltSandwich21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:57:06