保存 Excel 文档会删除图表

问题描述 投票:0回答:1

我使用OpenPyXL进行处理,只有2行代码:

workbook = load_workbook(filename='input.xlsx', keep_vba=True, rich_text=True)
# I will do operator here, but there is an error, so I comment this line
workbook.save('output.xlsx')

然后我得到了较小尺寸的输出

Output

当我尝试打开output.xlsx时,出现此通知:

Error Notification

该图表已被 Microsoft Excel 删除。有时我无法在 Microsoft Excel 中打开它,但 LibreOffice 可以打开它,没有错误。

左:输入.xlsx,右:输出.xlsx。图表已删除,Microsoft Excel 报告错误:

Result

警报:

enter image description here

我的输入文件通常有 ~ 4 张纸、一张图表和 1 张纸包含数据。我的任务是将数据写入one表,我不关心其他的。我想获得以下解决方案之一:

  1. 允许 OpenPyXL 以正确的方式读取图表。
  2. 让OpenPyXL读取特定的sheet,其他sheet就会通过。
  3. 避免 OpenPyXL 减小文件的大小(我认为 OpenPyXL 这样做是为了性能)。

使用其他库/语言是最后一个选择。

python excel openpyxl
1个回答
0
投票

问题在于您的图表是组合图表。图表绘图区域包含条形图和折线图。每个图表都有一个系列,其中第一个系列(条形图系列)具有

idx
0 和
order
1,而第二个系列(折线图系列)具有
idx
1 和
order
0. 顺序为图表选择数据源中的系列顺序。折线图系列位于条形图系列之前。

似乎

openpyxl
读者无法正确处理组合图表。它仅读取绘图区域中的第一个图表,并将第二个图表的 XML 作为绘图区域的附加 XML,但不作为拥有自己系列的图表。因为读者只找到一个图表系列,所以该系列得到
order
0,因为它是唯一已知的系列。以下未知折线图的 XML 保持
idx
1 和
order
0。但是这两个系列具有相同的
order
0,这会导致在 Excel 中打开时出错。

解决方法: 在图表的选择数据源中更改系列顺序。对于左图,“成本”位于“CV”之前。对于右图表,“IMP”位于“CPC”之前。 那么条形图系列有

idx
0 和
order
0,折线图系列有
idx
1 和
order
1。这样就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.