java使用poi导出ppt图表——环形图/空心饼图

目录

前言

使用java poi导出图表,就是找不到环形图/空心饼图怎么做的(或者是我没找到),找到的都是饼图,柱图,线图等。
所以就简单说一下怎么导出的。

一。导入poi相关jar包

二。先创建excel 表格,作为ppt图表的基础数据

三。根据表格数据生成环形图

四。导出ppt

五。结果


一。导入poi相关jar包


        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>

二。先创建excel 表格,作为ppt图表的基础数据


    public static XSSFWorkbook createExcel(){
        // 创建 excel[用于 ppt 图表的基础数据]
        XSSFWorkbook wb = new XSSFWorkbook();

        // 写入数据
        XSSFSheet sheet = wb.createSheet();
        XSSFRow row0 = sheet.createRow(0);
        row0.createCell(1).setCellValue("选项");
        row0.createCell(2).setCellValue("个数");
        for (int i = 0; i < 4; i++) {
            // 设置每一行的字段标题和数据
            XSSFRow row = sheet.createRow(i + 1);
            row.createCell(1).setCellValue(i + 1 + "选项");
            row.createCell(2).setCellValue(i * 5);
        }

        return wb;
    }

三。根据表格数据生成环形图


    public static XMLSlideShow writePPTByBaseChart(){

        // 创建一个ppt
        XMLSlideShow ppt = new XMLSlideShow();
        //获取excel
        XSSFWorkbook wb = createExcel();


        // 创建了一个幻灯片
        XSLFSlide slide = ppt.createSlide();
        // 创建一个图表
        XSLFChart chartPpt = ppt.createChart();
        // 把工作簿放到图表里,这样可以方便文件更新
        chartPpt.setWorkbook(wb);
        // 图表头
        chartPpt.setTitleText("选中情况环形图");


        // x坐标轴 底部
        XDDFCategoryAxis bottomAxis = chartPpt.createCategoryAxis(AxisPosition.BOTTOM);
        // y轴  左侧
        XDDFValueAxis leftAxis = chartPpt.createValueAxis(AxisPosition.LEFT);

        //创建一个环形图
        XDDFChartData data = chartPpt.createData(ChartTypes.DOUGHNUT, bottomAxis, leftAxis);

        //取刚才 设置的数据
        XSSFSheet sheet = wb.getSheetAt(0);

        // 分类轴标(X轴)数据,单元格范围位置 行:[1, 4] 列:[1, 1]
        XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, 4, 1, 1));

        // 设置为可变颜色
        data.setVaryColors(true);

        XDDFNumericalDataSource<Double> area = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 4, 2, 2));

        // 图表加载数据
        data.addSeries(countries, area);

        //画图
        chartPpt.plot(data);


        CTDLbls dLbls = chartPpt.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).addNewDLbls();
        dLbls.addNewShowVal().setVal(true);//图上面 显示数据
        dLbls.addNewShowLegendKey().setVal(false);
        dLbls.addNewShowCatName().setVal(true);//图上面  类别名称
        dLbls.addNewShowSerName().setVal(false);
        dLbls.addNewShowPercent().setVal(true);//图上面  显示百分比
        dLbls.addNewShowLeaderLines().setVal(false);// 引导线
        dLbls.setSeparator("\n");// 分隔符为分行符
        dLbls.addNewDLblPos().setVal(org.openxmlformats.schemas.drawingml.x2006.chart.STDLblPos.Enum.forString("inEnd"));// 数据标签内


        //设置环的大小【这里不设置的话  就是个饼图了】
        CTHoleSize holeSize = chartPpt.getCTChart().getPlotArea().getDoughnutChartArray(0).addNewHoleSize();
        holeSize.setVal((short) 50);


        //图表位置
        Rectangle2D.Double rect = new Rectangle2D.Double(700000, 500000, 7000000, 5000000);
        // 把图加到幻灯片里,指定画布
        slide.addChart(chartPpt,rect);

        return ppt;
    }

四。导出ppt

public void downloadPPT(){

//        request1.getChart().getChartStyle().setChartViewTypeCode(request1.getChartViewTypeCode());
        //使用方法得到api对象
        XMLSlideShow ppt = PPTUtils.writePPTByBaseChart();
        try{

            response.setCharacterEncoding("UTF-8");
            response.setContentType(PPTUtils.CONTENT_TYPE_OF_PPT);
            //通知浏览器下载文件而不是打开
            response.setHeader("Content-Disposition", "attachment;fileName="+java.net.URLEncoder.encode("daochu.ppt", PPTUtils.CHARSET_OF_UTF8));
            response.setHeader("Pragma", java.net.URLEncoder.encode("daochu.ppt", PPTUtils.CHARSET_OF_UTF8));


            //创建页面输出流对象
            ServletOutputStream outputStream = response.getOutputStream();
            ppt.write(outputStream);
            System.out.println("download PPT successfully");
            outputStream.close();
            ppt.close();
        }catch (Exception e){}

    }

五。结果

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Java 可以使用 Apache POI 库来操作 Excel 文件,其中也包括创建饼图环形。 以下是一个简单的示例代码,可以创建一个包含饼图的 Excel 文件: ``` import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; public class PieChartExample { public static void main(String[] args) throws Exception { // 创建 Excel 文件 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Pie Chart"); // 创建数据行 Row row; Cell cell; row = sheet.createRow(0); cell = row.createCell(0); cell.setCellValue("Category"); cell = row.createCell(1); cell.setCellValue("Value"); row = sheet.createRow(1); cell = row.createCell(0); cell.setCellValue("Apples"); cell = row.createCell(1); cell.setCellValue(20); row = sheet.createRow(2); cell = row.createCell(0); cell.setCellValue("Oranges"); cell = row.createCell(1); cell.setCellValue(30); row = sheet.createRow(3); cell = row.createCell(0); cell.setCellValue("Pears"); cell = row.createCell(1); cell.setCellValue(10); row = sheet.createRow(4); cell = row.createCell(0); cell.setCellValue("Bananas"); cell = row.createCell(1); cell.setCellValue(40); // 创建饼图 XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 5, 1, 15, 15); XSSFChart chart = drawing.createChart(anchor); chart.setTitleText("Fruit Sales"); chart.setTitleOverlay(false); XDDFChartLegend legend = chart.getOrAddLegend(); legend.setPosition(org.apache.poi.xddf.usermodel.chart.LegendPosition.TOP_RIGHT); XDDFDataSource<String> categories = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, 4, 0, 0)); XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 4, 1, 1)); XDDFChartData data = chart.createData(ChartTypes.PIE, null, null); data.setVaryColors(true); data.addSeries(categories, values); chart.plot(data); // 保存文件 FileOutputStream fileOut = new FileOutputStream("PieChartExample.xlsx"); workbook.write(fileOut); fileOut.close(); workbook.close(); } } ``` 这个示例代码创建了一个 Excel 文件,包含一个名为 "Pie Chart" 的工作表,该工作表包含一个简单的数据表格和一个饼图。你可以根据需要修改数据和图表的设置来满足你的需求。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值