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

Openpyxl中如何同时设置X轴标签旋转与字体且互不覆盖

解决X轴标签旋转与字体设置共存的问题

问题根源在于你两次对chart.x_axis.txPr进行赋值操作:第二次创建新的RichText对象时,完全覆盖了第一次设置好旋转属性的txPr实例,导致旋转效果丢失。

正确的做法是在同一个RichText配置中同时包含字体样式和旋转属性,避免重复赋值覆盖已有的设置。以下是修正后的代码:

import openpyxl
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.text import RichText
from openpyxl.drawing.text import Paragraph, ParagraphProperties, CharacterProperties, Font as Font2

# 创建工作簿和工作表
wb = openpyxl.Workbook()
sheet = wb.active

# 插入分类数据
categories = [
    'Category 1.1',
    'Category 1.2 - limit',
    'Category 2',
    'Category 2.1 - extra',
    'Category 2.2 - extra2'
]
for idx, cat in enumerate(categories, 1):
    sheet.cell(row=idx, column=1, value=cat)

# 插入数值数据
for i in range(5):
    sheet.cell(row=i+1, column=2, value=i+2)

# 创建柱状图
chart = BarChart()
values = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=5)
bar_categories = Reference(sheet, min_col=1, min_row=1, max_row=5)
chart.add_data(values)
chart.set_categories(bar_categories)

# 图表基础配置
chart.title = " BAR-CHART "
chart.legend = None
chart.x_axis.title = " X_AXIS "
chart.y_axis.title = " Y_AXIS "

# 同时设置X轴标签的字体与旋转
font_ = Font2(typeface='Avenir Next LT Pro')
cp = CharacterProperties(latin=font_, sz=900)
# 在段落属性中整合旋转角度(-2700000对应文字逆时针旋转90度,垂直显示)
p_pr = ParagraphProperties(defRPr=cp, rot="-2700000")
paragraph = Paragraph(pPr=p_pr, endParaRPr=cp)
chart.x_axis.txPr = RichText(p=[paragraph])
# 移除X轴标题(若不需要)
chart.x_axis.title = None

sheet.add_chart(chart, "E2")
wb.save("barChart.xlsx")

关键说明:

  • 不再拆分两次赋值txPr,而是在创建ParagraphProperties时直接加入rot参数,将字体样式和旋转属性整合到同一个段落配置中。
  • 旋转角度-2700000是openpyxl使用的EMU单位,对应90度逆时针旋转,若需其他角度可调整该数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:22:02