删除特定图例 apache poi excel 图 XDDFChartLegend

remove specific legend apache poi excel graph XDDFChartLegend

我使用的是apache poi 5.0.0版本 我已经使用数据在 excel 中生成了一个图表,我能够在图表底部看到图例。显示了六个图例。现在我想删除两个特定的图例而不将它们从图表中删除。

XDDFChartLegend 中似乎没有真正可用的功能。比如说

XDDFChartLegend  legend = chart.getOrAddLegend();
legend.getEntries().remove(4);

不起作用

如有任何帮助,我们将不胜感激。

无法删除图表图例条目。只能标记为删除,所以不会显示。

XDDFLegendEntry 提供方法 setDelete 来做到这一点。但问题是如何获得 XDDFLegendEntry.

XDDFChart.getOrAddLegend 只添加一个空的图例标记,它使用默认值来显示图例。默认情况下没有图例条目,因为只需要设置非默认的特殊属性。所以我们需要像 XDDFChartLegend.getOrAddLegendEntry 这样的东西来获取或添加图例条目。这直到现在才存在。

以下方法获取或添加图例条目到给定索引的给定 XDDFChartLegend

 XDDFLegendEntry getOrAddLegendEntry(XDDFChartLegend legend, long index) {
  XDDFLegendEntry legendEntry = null;
  for (XDDFLegendEntry storedLegendEntry : legend.getEntries()) {
   if (storedLegendEntry.getIndex() == index) {
    legendEntry = storedLegendEntry;
    break;
   }   
  }
  if (legendEntry == null) {
   legendEntry = legend.addEntry();
   legendEntry.setIndex(index); 
  }
  return legendEntry;
 } 

注意,我不使用 XDDFChartLegend.getEntry 因为这个 returns 位置 index 的条目而不是具有索引 index 的条目=17=]。但是我们需要索引为 index 的条目。所以我遍历所有条目并检查是否已经有索引。

将图例条目标记为已删除的用法如下:

...
   XDDFChartLegend legend = chart.getOrAddLegend();
   //...
   XDDFLegendEntry legendEntry = getOrAddLegendEntry(legend, 4);
   legendEntry.setDelete(true);
...