这篇文章主要介绍POI生成图表并导出word文档的基本操作。主要介绍三种图表:折线图、柱状图、饼状图。

一、效果展示

使用Java和POI技术生成的折线图,柱状图,饼状图的效果如下图所示:

二、环境准备

主要使用的技术有如下两个:

  • 编程语言:Java
  • 第三方依赖:Apache POI

Apache POI依赖代码如下所示:

<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>
<dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>3.1.0</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version>
</dependency>

三、具体实现

(1)折线图

折线图主要有X轴,Y轴,图表,图例,数据集等相关设置。使用POI生成图表到word文档中,具体步骤如下(代码几乎每句都有注释,方便阅读和理解):

  1. 创建word文档的XWPFDocument对象
  2. 创建chart图表的XWPFChart对象
  3. 创建X轴(分类轴)的XDDFCategoryAxis对象
  4. 创建Y轴(值轴)的XDDFValueAxis对象
  5. 创建折线图的XDDFLineChartData对象
  6. addSeries加载数据集
  7. 使用plot绘制折线图
  8. 输出到word文档
  9. 关闭流对象

具体实现代码如下所示:

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;
import java.io.IOException;/*** @version 1.0.0* @Description: poi生成折线图* @Date: 2021/12/25 18:14* @Copyright (C) ZhuYouBin*/
public class LineChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的折线图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置xAxis.setTitle("日期(年月)"); // x轴标题String[] xAxisData = new String[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据// 6、Y轴(值轴)相关设置XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置yAxis.setTitle("粉丝数(个)"); // Y轴标题Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据// 7、创建折线图对象XDDFLineChartData lineChart = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);// 8、加载折线图数据集XDDFLineChartData.Series lineSeries = (XDDFLineChartData.Series) lineChart.addSeries(xAxisSource, yAxisSource);lineSeries.setTitle("粉丝数", null); // 图例标题lineSeries.setSmooth(true); // 线条样式:true平滑曲线,false折线lineSeries.setMarkerSize((short) 6); // 标记点大小lineSeries.setMarkerStyle(MarkerStyle.CIRCLE); // 标记点样式// 9、绘制折线图chart.plot(lineChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\lineChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}}

(2)柱状图

柱状图主要有X轴,Y轴,图表,图例,数据集等相关设置,具体实现代码如下所示:

import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;/*** @version 1.0.0* @Description: poi生成柱状图* @Date: 2021/12/25 19:20* @Copyright (C) ZhuYouBin*/
public class BarChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置xAxis.setTitle("日期(年月)"); // x轴标题String[] xAxisData = new String[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据// 6、Y轴(值轴)相关设置XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置yAxis.setTitle("粉丝数(个)"); // Y轴标题yAxis.setCrossBetween(AxisCrossBetween.BETWEEN); // 设置图柱的位置:BETWEEN居中Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据// 7、创建柱状图对象XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);barChart.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\barChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}
}

(3)饼状图

饼状图主要是图表,图例,数据集等相关设置,具体实现代码如下所示:

import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;/*** @version 1.0.0* @Description: poi生成饼图* @Date: 2021/12/25 20:04* @Copyright (C) ZhuYouBin*/
public class PieChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的饼图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置:饼图中的图例显示String[] xAxisData = new String[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置分类数据// 6、Y轴(值轴)相关设置:饼图中的圆形显示Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置值数据// 7、创建饼图对象,饼状图不需要X,Y轴,只需要数据集即可XDDFPieChartData pieChart = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);// 8、加载饼图数据集XDDFPieChartData.Series pieSeries = (XDDFPieChartData.Series) pieChart.addSeries(xAxisSource, yAxisSource);pieSeries.setTitle("粉丝数", null); // 系列提示标题// 9、绘制饼图chart.plot(pieChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\pieChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}
}

以上,就是使用Java和POI技术生成折线图,柱状图,饼状图导出到word文档的步骤

我的其他文章

亲身分享 一次 字节跳动 真实面试经历和面试题

Poi 如何使用Java和POI技术生成折线图,柱状图,饼状图导出到word文档相关推荐

  1. poi导出excel文件,并生成原生图表(包括折线图,柱状图,饼状图,面积图)

    前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大牛谅解. 需要 ...

  2. java实现将数据生成图表至excel导出(包括折线图,柱状图,饼状图)

    1. 目的 根据已有数据,手动(java后台)生成图表至excel并导出.用于后台查询到数据后直接创建图表,可以代替直接使用图表信息字符串. 2. 说明 使用jfree图表绘制类库绘制图表,并生成到本 ...

  3. Java使用POI生成柱状图导出到word文档(柱状图)

    本篇文章主要介绍,如何使用Apache POI组件生成柱状图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成柱状图导出到word文档中,最终生成的柱状图如下所示: 二. ...

  4. Java使用POI生成折线图导出到word文档(折线图)

    本篇文章主要介绍,如何使用Apache POI组件生成折线图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成折线图导出到word文档中,最终生成的折线图如下所示: 二. ...

  5. Java使用POI生成饼状图导出到word文档(饼状图)

    本篇文章主要介绍,如何使用Apache POI组件生成饼状图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成饼状图导出到word文档中,最终生成的饼状图如下所示: 二. ...

  6. 使用POI实现读取Excel数据并生成柱状图、折线图、饼状图的工具类

    最近有一个需求是要通过程序自动根据excel中的数据来动态生成相应的图表.其中就有柱状图,折线图,饼状图.但是没想到用wps生成非常的简单,一点就可以生成,使用POI生成的过程非常的难受.不得不将这次 ...

  7. java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...

    在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...

  8. Springboot+poi导入导出+echart 做出树状图以及饼状图

    第一步:创建springboot项目:(创建项目省略) 第二步配置:pom依赖包 <dependencies><dependency><groupId>org.sp ...

  9. Java后台生成图表——主代码(折线图,饼状图,柱状图,-》并产出图片PDF或其他格式的图片内容)

    声明: 本文采用的数据均来源于网络,本人只用于学习记录,若有侵权,还望能及时联系. Maven 的 POM 依赖 <!--必要--><!--用于jfreechart生成图片 --&g ...

最新文章

  1. 关于Python多线程的理解
  2. 提醒一下技术人,你是不是陷入局部最优了
  3. JSON.stringify()和JOSN.parse()
  4. java form的时间格式_SpringMvc接收日期表单提交,自动转换成Date类型方法
  5. oracle 删序列,oracle创建和删除序列
  6. linux sudo 命令权限,linux su和sudo命令的区别
  7. java对mysql进行查找替换_java对mysql的增删改查
  8. Java之常见异常 整理集合
  9. 用R语言做数据分析——时间序列分类
  10. CKA 报考指南与准备事项
  11. fflush(stdout)
  12. 脉冲经过高通和低通滤波器后的波形
  13. 程序员从新手变成大佬的成长之路
  14. 新概念二册 Lesson 20 One man in a boat独坐孤舟 ( 动名词 doing)
  15. 淘宝API淘口令真实url
  16. Web前端(15)_input表单
  17. 空闲时间不要接私活,要提升自己
  18. 小红书编辑器_校招 | 微软、百度、小红书等校招已开启,尽快投递!
  19. 计算机关系的用算,计算机软考考试必备知识点:关系运算
  20. 两门课成绩平均分c语言,【函数C语言面试题】面试问题:C语言(指针方… - 看准网...

热门文章

  1. fu811电子管参数_曙光电子管FU-811
  2. 老兄xee的大作--迅雷协议分析--多链接资源获取
  3. css椭圆圆形边框_使用CSS在弧形,圆形和椭圆形中制作动画元素
  4. go test的简单使用
  5. 提词器软件有什么?这些软件值得你收藏
  6. 天路协同办公管理系统解决方案[1]
  7. 创业公司必看的12个关键绩效指标
  8. 如何吃透一个java项目
  9. 华为不想升级鸿蒙系统可以吗,芯片华为手机想要升级鸿蒙系统容易吗
  10. 7.26山东地炼成品油报价,下一轮油价调整时间