apache-poi 4.0 NullPointer для серии setTitle - PullRequest
0 голосов
/ 30 октября 2018

Исключение в потоке "main" java.lang.NullPointerException в org.apache.poi.xddf.usermodel.chart.XDDFChartData $ Series.setTitle (XDDFChartData.java:122)

Код выглядит следующим образом:

CellReference cellref = new CellReference("A6"); 

//A6 value = "My Title"

XDDFLineChartData.Series series3 = (XDDFLineChartData.Series)data.addSeries(xs, ys3);
series3.setMarkerSize((short) 6);
series3.setMarkerStyle(MarkerStyle.DIAMOND);

series3.setTitle("My Title",cellref);

Я проверил документацию, для arg0 требуется строка и CellReference для arg1.

Я продолжаю получать NullPointerException. Я что-то упустил ??

Спасибо за ответы.

1 Ответ

0 голосов
/ 01 ноября 2018

Чтобы ответить на вопрос, как исправить ошибку в XDDFChartData.Series.setTitle:

В XDDFChartData.Series.setTitle getSeriesText() используется без проверки на ноль. Но XDDFLineChartData.Series.getSeriesText () , конечно, может возвращать ноль, поскольку series.getTx() может возвращать ноль. Поэтому мы должны убедиться, что есть текстовый элемент серии, прежде чем использовать XDDFChartData.Series.setTitle.

...
XSSFChart chart = drawing.createChart(anchor);
...
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
...
XDDFChartData data = chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
data.addSeries(...);
data.addSeries(...);
chart.plot(data);

if (chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0).getTx() == null) 
 chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0).addNewTx();
data.getSeries().get(0).setTitle("Series 1 Title", null);

if (chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1).getTx() == null)
 chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1).addNewTx();
data.getSeries().get(1).setTitle("Series 2 Title", null);
...
//setting the axis Ids to the LineChart
chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(bottomAxis.getId());
chart.getCTChart().getPlotArea().getLineChartArray(0).addNewAxId().setVal(leftAxis.getId());
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...