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

如何使用openpyxl设置Excel图表坐标轴刻度标签的字体?

用openpyxl设置Excel图表X轴刻度标签字体的正确方法

你当前的代码错误修改了X轴标题的字体,而非刻度标签的字体。要配置X轴刻度标签的字体,需要针对x_axis.tickLabels进行设置,x_axis.textProperties其实是用来设置轴标题文字属性的。

以下是修正后的完整代码:

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.text import RichText
from openpyxl.drawing.text import Font, CharacterProperties


def main():
    wb = Workbook()
    chart = _create_openpyxl_chart(wb)

    _format_chart(chart)

    wb.save("example.xlsx")


def _format_chart(chart):
    font_type = 'Arial'
    font_size = 12
    font_style = 'bold'

    font = Font(typeface=font_type)
    character_properties = CharacterProperties(
        sz=font_size * 100,  # openpyxl中字体大小单位是1/100点
        b=(font_style == 'bold'),
        latin=font,
    )

    axis = chart.x_axis
    # 针对刻度标签进行设置,而非轴标题
    if axis.tickLabels is None:
        axis.tickLabels = RichText()
    
    # 确保段落和文本块存在,避免索引错误
    if not axis.tickLabels.paragraphs:
        axis.tickLabels.paragraphs.append(RichText.P())
    paragraph = axis.tickLabels.paragraphs[0]
    
    if not paragraph.text:
        paragraph.text.append(RichText.Tt())
    text_run = paragraph.text[0]
    text_run.properties = character_properties


def _create_openpyxl_chart(wb):
    sheet = wb.active
    _create_example_data(sheet)
    chart = _create_stacked_bar_chart()
    _connect_chart_to_example_data(chart, sheet)
    sheet.add_chart(chart)

    return chart


def _connect_chart_to_example_data(chart, sheet):
    values = Reference(
        sheet,
        min_col=1,
        max_col=4,
        min_row=2,
        max_row=4,
    )
    chart.add_data(
        values,
        titles_from_data=True,
        from_rows=True,
    )
    categories = Reference(
        sheet,
        min_col=2,
        max_col=4,
        min_row=1,
        max_row=1,
    )
    chart.set_categories(categories)


def _create_stacked_bar_chart():
    chart = BarChart()
    chart.x_axis.title = "Year"
    chart.type = "col"
    chart.grouping = "stacked"
    chart.overlap = 100
    return chart


def _create_example_data(sheet):
    data = [
        ["Category", 2017, 2018, 2019],
        ["Apples", 10, 7, 12],
        ["Oranges", 5, 3, 4],
        ["Bananas", 8, 6, 9],
    ]
   
    for row in data:
        sheet.append(row)


if __name__ == '__main__':
    main()

关键说明:

  • 核心修改是将操作对象从axis.textProperties改为axis.tickLabels,这才是控制X轴刻度标签的属性
  • 添加了对paragraphs和text列表的空值判断,避免运行时出现索引越界错误
  • 字体大小sz的单位是1/100点,所以需要将字号乘以100(比如12号字体对应1200)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:45:13