Created attachment 37116 [details] image bugs and image google sheets By opening an xlsx file generated with apache poi-ooxml 4.1.2, it enters recovery mode by deleting the pie chart. Instead on google sheets it works!!!!! Bye Francesco
this is the code implemented: private Integer generateChart(XSSFSheet worksheet, String seriesChart, String keyChart, ExcelChart excelChart, Integer indexRow, String xAxis) { // ExcelChart // excelChart=sheetData.getClass().getAnnotation(ExcelChart.class) XSSFDrawing drawing = worksheet.createDrawingPatriarch(); Integer startChart = indexRow; indexRow += excelChart.sizeRow(); logger.debug("Start Chart: " + startChart); XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, startChart, excelChart.sizeColumn(), indexRow); XSSFChart chart = drawing.createChart(anchor); XDDFChartLegend legend = chart.getOrAddLegend(); legend.setPosition(excelChart.legendPosition()); XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(excelChart.categoryAxis()); XDDFValueAxis leftAxis = chart.createValueAxis(excelChart.valueAxis()); logger.debug("-----------------xAxis: " + xAxis); XDDFDataSource<String> xs = XDDFDataSourcesFactory.fromStringCellRange(worksheet, CellRangeAddress.valueOf(xAxis)); XDDFChartData chartData = chart.createData(excelChart.chartTypes(), bottomAxis, leftAxis); XDDFChartData.Series series = null; logger.debug("------------seriesChart: " + seriesChart); series = chartData.addSeries(xs, XDDFDataSourcesFactory.fromNumericCellRange(worksheet, CellRangeAddress.valueOf(seriesChart))); series.setTitle(keyChart, null); series.setShowLeaderLines(true); chartData.setVaryColors(true); chart.plot(chartData); return indexRow; }
You can refer to the newly introduced example manipulating Doughnut chart: src/examples/src/org/apache/poi/examples/xslf/DoughnutChartFromScratch.java Like the Doughnut chart, the Pie chart chart does not have category axis and value axes. if you remove your lines: XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(excelChart.categoryAxis()); XDDFValueAxis leftAxis = chart.createValueAxis(excelChart.valueAxis()); your example should produce a file which will not be cleaned by PowerPoint upon opening it. I hope we can now close this issue.