Проблема запуска официальных примеров LineChars и ScatterChart с Apache POI 4.0 - PullRequest
0 голосов
/ 10 сентября 2018

Существует проблема с официальными примерами LineChart и ScatterChart для Apache POI 4.0. Они компилируются и запускаются без ошибок, но созданный файл Excel не может быть открыт с указанием наличия нечитаемого содержимого. В Excel 2010 и 2016 предусмотрена возможность восстановления данных из рабочей книги, и после нажатия кнопки «Да» открывается диалоговое окно . В чем может быть проблема?

1 Ответ

0 голосов
/ 11 сентября 2018

В новом коде XDDF отсутствует настройка axId s в lineChart и scatterChart.

В /xl/charts/chart1.xml, это выглядит так:

<c:lineChart>
 ...
 <c:axId val="0"/>
 <c:axId val="1"/>
</c:lineChart>

для линейного графика ..

Делаем добавление:

...
            XDDFChartData data = chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
            data.addSeries(xs, ys1);
            data.addSeries(xs, ys2);
            chart.plot(data);

            //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());


            // Write the output to a file
            try (FileOutputStream fileOut = new FileOutputStream("ooxml-line-chart.xlsx")) {
                wb.write(fileOut);
            }
...

в LineChart.java

и

...
            XDDFChartData data = chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);

            data.addSeries(xs, ys1);
            data.addSeries(xs, ys2);
            chart.plot(data);

            //setting the axis Ids to the ScatterChart
            chart.getCTChart().getPlotArea().getScatterChartArray(0).addNewAxId().setVal(bottomAxis.getId());
            chart.getCTChart().getPlotArea().getScatterChartArray(0).addNewAxId().setVal(leftAxis.getId());


            // Write the output to a file
            try (FileOutputStream fileOut = new FileOutputStream("ooxml-scatter-chart.xlsx")) {
                wb.write(fileOut);
            }

...

в ScatterChart.java

и это будет работать.

...