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
相关产品推荐
相关产品推荐

