удалите конкретную легенду apache poi excel graph XDDFChartLegend

#java #excel #apache-poi #excel-charts

Вопрос:

я использую версию apache poi 5.0.0. Я создал график в Excel, используя данные, и я могу видеть легенды в нижней части графика. Здесь показано шесть легенд. Теперь я хочу удалить две конкретные легенды, не удаляя их с графика.

введите описание изображения здесь

Похоже, в XDDFChartLegend нет доступных функций, которые действительно работают. скажем, например

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

не работает

Любая помощь будет признательна.

Ответ №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);
...
 

Комментарии:

1. Идеальный ответ!!

2. @Каннан Сундарарадж: Пожалуйста, обратите внимание на мою правку.