【问题标题】:remove specific legend apache poi excel graph XDDFChartLegend删除特定图例 apache poi excel 图 XDDFChartLegend
【发布时间】:2021-10-07 13:38:31
【问题描述】:

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

XDDFChartLegend 中似乎没有真正有效的函数。比如说

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

没用

任何帮助将不胜感激。

【问题讨论】:

    标签: java excel apache-poi excel-charts


    【解决方案1】:

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

    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,因为它返回位置 index 处的条目,而不是索引为index 的条目。但是我们需要索引为index 的条目。所以我遍历所有条目并检查是否已经有一个索引。

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

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

    【讨论】:

    • 完美答案!!
    • @Kannan Sundararaj:请注意我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多