如何用Openpyxl修改Excel图表系列名称且保留原列名?
解决Openpyxl修改折线图系列名称(不改动数据列)的问题
完全可以只修改图表系列名称而不改动数据列标题,你之前报错是因为操作方式不对:chart.series是系列对象的列表,不能直接访问chart.series.title,而且每个系列的title是一个对象,不能直接赋值字符串,需要修改其text属性。
具体操作步骤
- 准备好存储原始名称的列表(比如
original_names),确保列表长度和图表的系列数量一致 - 遍历
chart.series列表,逐个修改每个系列的标题文本
修改后的代码示例
from openpyxl.chart import LineChart, Reference # 若需要显式创建Title对象可导入,多数情况直接修改text属性即可 # from openpyxl.chart.text import Title x_values = Reference(sheet, min_col=1, min_row=2, max_col=1, max_row=sheet.max_row) y_values = Reference(sheet, min_col=column_init, min_row=row_num, max_col=column_end, max_row=sheet.max_row) # 创建图表 chart = LineChart() chart.style = 12 chart.add_data(y_values, titles_from_data=True) chart.set_categories(x_values) # 注意你之前重复调用了set_categories,保留一个即可 chart.x_axis.number_format = 'hh:mm' chart.x_axis.majorTimeUnit = "hours" chart.x_axis.title = "Date" # ------------------- 新增修改系列名称的代码 ------------------- # 替换为你的原始名称列表 original_names = ["原始系列名1", "原始系列名2", "原始系列名3"] for idx, series in enumerate(chart.series): # 直接修改标题文本(推荐方式) series.title.text = original_names[idx] # 若上述方式报错,尝试重新赋值Title对象 # series.title = Title(text=original_names[idx]) # ------------------------------------------------------------- graph_location = "E2" sheet.add_chart(chart, graph_location) book.save(excel_name)
关键说明
chart.series是图表所有系列的集合,每个元素对应一条折线的系列对象- 每个系列的
title是Title类型对象,必须通过text属性修改显示名称,不能直接赋值字符串 - 确保
original_names的长度和len(chart.series)一致,避免索引越界
内容的提问来源于stack exchange,提问作者Fast Fire
相关产品推荐
相关产品推荐

