如何使用Python openpyxl移除Excel图表图例中的指定数据系列
问题原因
该问题和命名空间无关,是openpyxl 3.0.7版本的已知缺陷导致的:
- 你生成的XML里虽然带了
delete=1的标签,但对应的<legendEntry>节点缺少Excel要求的配套文本标识节点,Excel会判定该配置无效,打开文件保存时就会直接删除所有legendEntry配置,导致隐藏规则不生效。 - Excel保存时给元素加命名空间前缀是OOXML文件的常规格式调整,本身不影响功能,不需要额外适配。
可行解决方案
方案1:升级openpyxl版本(推荐)
openpyxl从3.1.0版本开始已经完全修复了LegendEntry的序列化问题,升级后你原有的代码不需要做任何修改,生成的文件即可正常隐藏指定系列的图例。
升级命令:pip install --upgrade openpyxl
方案2:不升级版本的替代实现
如果因为环境限制不能升级openpyxl,可以不用操作LegendEntry,直接在创建系列时给需要隐藏图例的系列设置空标题,即可实现相同效果,完全不影响系列在图表中的正常渲染:
import openpyxl as xl wb = xl.workbook.Workbook() sh = wb['Sheet'] data = [(1, 2), (2, 3)] for row in data: sh.append(row) xVals = xl.chart.Reference(sh, min_row=1, min_col=1, max_row=2) yVals = xl.chart.Reference(sh, min_row=1, min_col=2, max_row=2) # 需要隐藏图例的系列,title参数传None即可 ser = xl.chart.Series(yVals, xVals, title=None) ch = xl.chart.ScatterChart() ch.title = 'Chart-1' ch.series.append(ser) ch.legend.legendPos = 'b' sh.add_chart(ch, 'A3') wb.save(filename = 'test.xlsx')
内容的提问来源于stack exchange,提问作者Amivuul
相关产品推荐
相关产品推荐

