如何自定义设置pd.to_excel()导出Excel文件的表头样式?
Pandas自定义DataFrame导出Excel表头样式操作方法
自定义Pandas导出Excel的表头样式,需要配合Excel写入引擎实现,以下是两种常用的可落地方案:
方案1:使用xlsxwriter引擎(更适合自定义样式场景)
前置依赖安装
pip install pandas xlsxwriter
实现代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ "姓名": ["张三", "李四", "王五"], "年龄": [25, 30, 28], "部门": ["技术部", "产品部", "运营部"] }) with pd.ExcelWriter("自定义表头导出.xlsx", engine="xlsxwriter") as writer: # 写入DataFrame时关闭默认表头,从第二行开始写数据 df.to_excel(writer, sheet_name="数据页", startrow=1, header=False, index=False) # 获取工作簿和工作表对象 workbook = writer.book worksheet = writer.sheets["数据页"] # 自定义表头样式,可按需调整所有参数 header_style = workbook.add_format({ "bold": True, # 加粗 "align": "center", # 水平居中 "valign": "vcenter", # 垂直居中 "fg_color": "#E6F3FF", # 表头背景色 "border": 1, # 边框宽度 "font_size": 12, # 字体大小 "font_name": "微软雅黑" # 字体 }) # 手动写入表头并应用自定义样式 for col_idx, col_name in enumerate(df.columns): worksheet.write(0, col_idx, col_name, header_style) # 可选:自动调整列宽适配内容 for col_idx, col_name in enumerate(df.columns): max_content_len = max(df[col_name].astype(str).map(len).max(), len(col_name)) worksheet.set_column(col_idx, col_idx, max_content_len + 2)
方案2:使用openpyxl引擎
前置依赖安装
pip install pandas openpyxl
实现代码
import pandas as pd from openpyxl.styles import Font, Alignment, PatternFill, Border, Side # 构造示例DataFrame df = pd.DataFrame({ "姓名": ["张三", "李四", "王五"], "年龄": [25, 30, 28], "部门": ["技术部", "产品部", "运营部"] }) with pd.ExcelWriter("自定义表头导出_openpyxl.xlsx", engine="openpyxl") as writer: df.to_excel(writer, sheet_name="数据页", index=False) worksheet = writer.sheets["数据页"] # 定义表头样式组件 header_font = Font(name="微软雅黑", size=12, bold=True, color="FFFFFF") header_align = Alignment(horizontal="center", vertical="center") header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid") thin_border = Side(border_style="thin", color="000000") header_border = Border(left=thin_border, right=thin_border, top=thin_border, bottom=thin_border) # 给第一行所有单元格(表头)应用样式 for cell in worksheet[1]: cell.font = header_font cell.alignment = header_align cell.fill = header_fill cell.border = header_border # 可选:自动调整列宽 for col in worksheet.columns: max_len = 0 col_letter = col[0].column_letter for cell in col: if cell.value: max_len = max(max_len, len(str(cell.value))) worksheet.column_dimensions[col_letter].width = max_len + 2
样式自定义说明
你可以根据自身需求调整样式参数,包括但不限于字体、字号、颜色、背景色、边框粗细、对齐方式等,不需要使用Pandas默认的表头样式即可实现完全自定义。
内容的提问来源于stack exchange,提问作者Mehmet Soydam
相关产品推荐
相关产品推荐

