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

