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

如何用XlsxWriter旋转Excel表头?解决大表格表头显示问题

解决XlsxWriter表头旋转导致Excel文件损坏的问题

问题核心在于你同时使用add_table和data.to_excel操作同一工作表区域,且直接修改表格单元格格式破坏了Excel表格的结构规则,最终导致文件损坏。正确的做法是通过表格的列配置直接指定表头格式,而非单独修改单元格。

解决方案步骤

  • 避免重复写入冲突:选择一种方式加载数据,不要同时用add_table和to_excel操作同一区域
  • 在表格列配置中绑定表头格式:利用XlsxWriter表格的header_format参数,将旋转格式直接应用到表头
  • 调整行高适配旋转后的表头:表头旋转后需要足够行高才能完整显示内容

修改后的可运行代码

import pandas as pd

data = pd.DataFrame(
    [[1, 2], [3, 4]], columns=["short", "Veeeeeeeeeeeeeeeeeeeeeeeeery long"]
)

with pd.ExcelWriter("fixed_MWE.xlsx", engine="xlsxwriter") as writer:
    # 先将数据写入工作表
    data.to_excel(writer, index=False, sheet_name="MWE")
    
    # 获取工作簿和目标工作表对象
    workbook = writer.book
    worksheet = writer.sheets["MWE"]
    
    # 创建顺时针旋转90度的表头格式(rotation=-90对应顺时针)
    rotate_header_format = workbook.add_format({
        "rotation": -90,
        "valign": "vcenter",  # 垂直居中对齐
        "align": "center"     # 水平居中对齐
    })
    
    # 定义表格列配置,为每列绑定表头文字和旋转格式
    col_settings = [
        {"header": col, "header_format": rotate_header_format} 
        for col in data.columns
    ]
    
    # 确定表格覆盖区域:从A1到数据最后一行最后一列
    max_row, max_col = data.shape
    worksheet.add_table(
        0, 0, max_row, max_col - 1,
        {
            "columns": col_settings,
            "banded_rows": True,
            "style": "Table Style Medium 2"  # 可选:指定表格样式
        }
    )
    
    # 设置列宽(按需求调整)
    worksheet.set_column(0, max_col - 1, 5)
    # 设置表头行高,适配旋转后的文字长度
    worksheet.set_row(0, 120)  # 行高单位为像素,可按需调整

关键说明

  • 表格样式规则:Excel的表格(Table)对象有独立的结构规则,必须通过header_format参数设置表头样式,不能直接用worksheet.write修改表格内单元格,否则会破坏表格结构导致文件损坏
  • 旋转参数对应:XlsxWriter中rotation=-90代表文字顺时针旋转90度,rotation=90为逆时针旋转,可按需选择
  • 行高适配:旋转后的表头需要足够行高才能完整显示,可根据表头文字长度调整set_row的像素值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:46:13