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

使用pd.DataFrame.to_excel时如何旋转单元格文本?

解决Pandas导出Excel时设置部分单元格垂直文本的问题

嘿,我之前也碰到过一模一样的需求,其实不用纠结——pandas和xlsxwriter完全可以配合实现这个功能,关键是要拿到pandas导出时对应的workbook和worksheet对象,然后用xlsxwriter的格式工具来设置。下面我给你两种常用的实现方式:

方法一:写入DataFrame时直接指定格式(适合整列/批量单元格)

这种方式适合你提前知道哪些列或区域需要垂直文本的场景,步骤很清晰:

  1. 先创建xlsxwriter的格式对象,设置文本旋转角度(90度逆时针是从上到下的垂直排列,270度顺时针是从下到上,根据你的需求选);
  2. 用pandas的ExcelWriter指定xlsxwriter引擎,写入DataFrame;
  3. 获取对应的workbook和worksheet对象,用set_column给整列加格式,或者用write给特定单元格覆盖格式。

代码示例:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    '常规文本': ['张三', '李四', '王五'],
    '垂直文本': ['需要垂直显示', '这里是垂直', '文本内容']
})

# 创建ExcelWriter并写入DataFrame
writer = pd.ExcelWriter('垂直文本示例.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)

# 获取xlsxwriter的工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# 创建垂直文本格式:rotation=90是从上到下的垂直排列
vertical_format = workbook.add_format({'rotation': 90})

# 给整列设置垂直格式(这里"垂直文本"列是第2列,对应xlsxwriter的列索引1)
worksheet.set_column('B:B', None, vertical_format)

# 如果只想给特定单元格设置,比如B2单元格(对应df的第0行第1列)
# worksheet.write(1, 1, df.iloc[0, 1], vertical_format)

# 保存并关闭writer
writer.close()

方法二:写入后给零散单元格设置格式

如果你的垂直文本单元格是分散的,没有规律,可以先写入整个DataFrame,再遍历需要修改的单元格,用xlsxwriter的write方法重新写入单元格内容并附带格式(注意:xlsxwriter不支持直接修改已写入单元格的格式,必须重写内容覆盖)。

代码示例(接上面的代码):

# 假设要设置B3和B4单元格为垂直文本(对应Excel行号3、4,xlsxwriter的行索引2、3)
target_cells = [(2, 1), (3, 1)]  # (行索引, 列索引)

for row_idx, col_idx in target_cells:
    # 获取原单元格的值
    cell_value = df.iloc[row_idx - 1, col_idx]  # 因为df的行从0开始,Excel表头是行索引0,数据从行索引1开始
    # 重写单元格并应用垂直格式
    worksheet.write(row_idx, col_idx, cell_value, vertical_format)

writer.close()

注意事项

  • 旋转角度:rotation=90是逆时针旋转90度,文字从上到下垂直;rotation=270是顺时针旋转90度,文字从下到上垂直,按需选择;
  • 合并单元格:如果要给合并后的单元格设置垂直文本,需要在合并时指定格式,或者给合并区域的左上角单元格应用格式;
  • 必须用xlsxwriter引擎:确保ExcelWriter的engine参数设为'xlsxwriter',其他引擎(比如openpyxl)的操作方式不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:29