当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《ApachePOI仅支持ScatterCharts和LineCharts为什么?》经验,为你挑选了1个好方法。

我只看到LineChartScatter Charts默认支持Apache POI.

问题: 如何在spreadhsheet中添加其他图表类型..

任何想法或任何帮助?或者是否有任何理由让apache只支持这两种类型的图表.



1> Axel Richter..:

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 .


@LuTHieR:原理如下所述:使用一个工作表创建一个工作簿,并在Excel中创建最简单的条形图.解压缩*.xlsx并查看/xl/charts/chart1.xml以获取所需的XML.然后,来自现有图表示例的XSSFChart,获取CTChart,然后使用grepcode,从对象到对象进行摆动.您可以在此处发布当前不可用的代码作为关于apache poi条形图的新问题.然后我可以看看它,也许可以帮助.
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有