java poi 创建ppt图表,柱状图


前言

这几天突然发现网上没有给ppt插入图表的例子(或者是我没找到),找到的大部分都是根据现有的ppt图表区修改数据。
所以就简单弄了个柱状图的小demo


一、正文

1.依赖

用了5.2.2的poi

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>

2.代码

纯手打,有啥错误多多理解

柱状图的数据,这里是创建了一个excel工作簿,也可以导入现有工作簿

		// 创建一个工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 写入数据
        XSSFSheet sheet = workbook.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(0).setCellValue( (i+1) + "班");
            row.createCell(1).setCellValue(3);
            row.createCell(2).setCellValue(4);
        }

excel的数据长这个样子,方便下面看
在这里插入图片描述

		// 创建一个ppt
        XMLSlideShow ppt = new XMLSlideShow();
        // 创建了一个幻灯片 这就是个空白的幻灯片,没有背景啥的,需要的可以自行研究
        XSLFSlide slide = ppt.createSlide();
        // 创建一个图表
        XSLFChart chart = ppt.createChart();
        // 把工作簿放到图表里,这样可以方便文件更新
        chart.setWorkbook(workbook);
        // 图表头
        chart.setTitleText("测试文本title");
        //这个是生成图表底部的示例的
        XDDFChartLegend legend = chart.getOrAddLegend();
        legend.setPosition(LegendPosition.BOTTOM);
        // x坐标轴 底部
        XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
        // y轴  左侧
        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
        // 创建图表数据,第一个指定是什么图表 柱状图或者饼图,折线图都ok,
        XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
        // 底部类别的数据源,可以从数组读,也可以从指定一个excel范围
        XDDFCategoryDataSource xddfCategoryDataSource = XDDFDataSourcesFactory.fromStringCellRange(sheet,new CellRangeAddress(1,4,0,0));
        // 这是第一个柱状图的数据源
        XDDFNumericalDataSource<Double> doubleXDDFNumericalDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 4, 1, 1));
        // 这是第二个柱状图的数据源
        XDDFNumericalDataSource<Double> doubleXDDFNumericalDataSource2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 4, 2, 2));
        // 把第一组柱状图添加到图表数据里 返回一个系列数据
        XDDFChartData.Series series = data.addSeries(xddfCategoryDataSource, doubleXDDFNumericalDataSource);
        // 第二组
        XDDFChartData.Series series1 = data.addSeries(xddfCategoryDataSource, doubleXDDFNumericalDataSource2);
        // 设置第一个系列的名称 上面那个生成图表底部的示例的就是这里 ,第一个指定名称,第二个可以给一个单元格。两个参数可以有一个为null
        series.setTitle("男", new CellReference(sheet.getRow(0).getCell(1)));
        series1.setTitle("女", new CellReference(sheet.getRow(0).getCell(2)));
        // 数据源转为barchart
        XDDFBarChartData bar = (XDDFBarChartData) data;
        // 这一句是y轴的一个操作,也没懂什么意思,但是没有这个,画的图表会超出画布范围
        leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
        // 是否设置不同的颜色 false就行
        bar.setVaryColors(false);
        // 柱状图的方向
        bar.setBarDirection(BarDirection.COL);
        // 柱状图的类型,不是有什么堆积。。。的
        bar.setBarGrouping(BarGrouping.STANDARD);
        // 可以设置间隙宽度
        // bar.setGapWidth(200);
        // 开始画图
        chart.plot(data);
        // ***一开始我生成的图总是在左上角一点点,我看了addChart源码 x:10,y:10,w:500000,h:500000
        // 我就只能一点点加到了合适的差不多的参数,你们可以自己试试
        Rectangle2D.Double rect = new Rectangle2D.Double(700000, 500000, 7000000, 5000000);
        // 把柱状图加到幻灯片里,指定画布
        slide.addChart(chart,rect);
        ppt.write(new FileOutputStream("D://temp333.pptx"));

3.图例

ppt就长这个样子,柱状图的颜色什么的都是可以指定的,你们可以研究下哈
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值