Man*_*lam 1 java excel charts apache-poi
我只看到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();
}
}
Run Code Online (Sandbox Code Playgroud)
免责声明:使用Excel 2007进行测试,不适用于Libreoffice和Openoffice.
这个例子需要FAQ-N10025中ooxml-schemas-1.3.jar提到的所有模式的完整jar .