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

java poi 创建ppt图表,柱状图

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

java poi 创建ppt图表,柱状图

文章目录
  • 前言
  • 一、正文
    • 1.依赖
    • 2.代码
    • 3.图例


前言

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


一、正文 1.依赖

用了5.2.2的poi

        
            org.apache.poi
            poi
            5.2.2
        
        
            org.apache.poi
            poi-ooxml
            5.2.2
        
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 doubleXDDFNumericalDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 4, 1, 1));
        // 这是第二个柱状图的数据源
        XDDFNumericalDataSource 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就长这个样子,柱状图的颜色什么的都是可以指定的,你们可以研究下哈

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

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

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