栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

前言

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

一。导入poi相关jar包

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

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

四。导出ppt

五。结果


一。导入poi相关jar包
        
            org.apache.poi
            poi-ooxml
            4.1.2
        
        
            org.apache.poi
            poi-ooxml-schemas
            4.1.2
        
        
            org.apache.poi
            poi
            4.1.2
        
        
            org.apache.poi
            poi-scratchpad
            4.1.2
        

二。先创建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 countries = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, 4, 1, 1));

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

        XDDFNumericalDataSource 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){}

    }

五。结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号