为什么Apache POI仅支持ScatterCharts和LineCharts?

我发现只有LineChartScatter ChartsApache POI默认支持。

问题:我们如何在扩展表中添加其他图表types..

任何想法或任何帮助? 或者是否有任何理由为Apache支持这两种types的图表。

Apache poi也提供poi-ooxml-schemas 。 这是基于XML的办公文档的基础对象。 所以只要不提供更高层次的东西,就可以直接用这些东西来解决他的要求。 问题是这些对象的文档。 据我所知,没有。 但有http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/

所以来自现有图表示例的CTChart ,我们可以得到CTChart ,然后使用http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/org/openxmlformats /schemas/drawingml/x2006/chart/CTChart.java#CTChart从一个对象到另一个对象。

首先直接使用Excel创build一个简单的*.xlsx文件,并查看其XML内容是有帮助的。 在那里,我们可以得到什么对象需要提示。 为此,我们可以简单地使用ZIP软件解压*.xlsx

在此示例中,使用一张工作表创build工作簿,并在Excel创build最简单的饼图。 解压缩*.xlsx并查看/xl/charts/chart1.xml

示例饼图:

 import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.*; import org.apache.poi.ss.usermodel.charts.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFChart; import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart; import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea; import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart; import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean; import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer; import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef; import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef; public class PieChart { public static void main(String[] args) throws Exception { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); Row row; Cell cell; for (int r = 0; r < 3; r++) { row = sheet.createRow(r); cell = row.createCell(0); cell.setCellValue("S" + r); cell = row.createCell(1); cell.setCellValue(r+1); } Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 5, 20); Chart chart = drawing.createChart(anchor); CTChart ctChart = ((XSSFChart)chart).getCTChart(); CTPlotArea ctPlotArea = ctChart.getPlotArea(); CTPieChart ctPieChart = ctPlotArea.addNewPieChart(); CTBoolean ctBoolean = ctPieChart.addNewVaryColors(); ctBoolean.setVal(true); CTPieSer ctPieSer = ctPieChart.addNewSer(); ctPieSer.addNewIdx().setVal(0); CTAxDataSource cttAxDataSource = ctPieSer.addNewCat(); CTStrRef ctStrRef = cttAxDataSource.addNewStrRef(); ctStrRef.setF("Sheet1!$A$1:$A$3"); CTNumDataSource ctNumDataSource = ctPieSer.addNewVal(); CTNumRef ctNumRef = ctNumDataSource.addNewNumRef(); ctNumRef.setF("Sheet1!$B$1:$B$3"); System.out.println(ctChart); FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); wb.write(fileOut); fileOut.close(); } } 

免责声明:使用Excel 2007进行testing,不适用于Libreoffice和Openoffice。

这个例子需要FAQ-N10025中提到的所有模式ooxml-schemas-1.3.jar的完整jar。