我只看到LineChart
并Scatter Charts
默认支持Apache POI
.
问题: 如何在spreadhsheet中添加其他图表类型..
任何想法或任何帮助?或者是否有任何理由让apache只支持这两种类型的图表.
Apache poi poi-ooxml-schemas
也提供.这是XML
基于office文档的基础对象.因此,只要不在更高级别提供这些对象,就可以尝试直接使用这些对象来解决他的要求.问题是这些对象的文档.据我所知,没有.但是有http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/.
所以来自XSSFChart
现有的图表示例我们可以得到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从对象摆动到对象.
*.xlsx
首先直接创建一个简单的文件Excel
并查看其XML
内容是有帮助的.在那里我们可以得到提示需要什么对象.为此,我们可以*.xlsx
简单地用ZIP
软件解压缩.
在此示例中,创建一个工作簿,其中包含一个工作表和最简单的饼图Excel
.解压缩*.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进行测试,不适用于Libreoffice和Openoffice.
这个例子需要FAQ-N10025中ooxml-schemas-1.3.jar
提到的所有模式的完整jar .