POI生成图表并导出word文档的基本操作

时间:2025-03-31 08:14:02

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

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


二、环境准备
主要使用的技术有如下两个:

编程语言:Java

第三方依赖:Apache POI

Apache POI依赖代码如下所示:

<dependencies>
    <dependency>
        <groupId></groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId></groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId></groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId></groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId></groupId>
        <artifactId>xmlbeans</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId></groupId>
        <artifactId>ooxml-schemas</artifactId>
        <version>1.4</version>
    </dependency>
</dependencies>
三、具体实现
(1)折线图

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

创建word文档的XWPFDocument对象

创建chart图表的XWPFChart对象

创建X轴(分类轴)的XDDFCategoryAxis对象

创建Y轴(值轴)的XDDFValueAxis对象

创建折线图的XDDFLineChartData对象

addSeries加载数据集

使用plot绘制折线图

输出到word文档

关闭流对象

具体实现代码如下所示:

package ;

import .;
import ;
import .*;
import ;
import ;

import ;
import ;

/**
 * @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 = (15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
        // 3、图表相关设置
        ("使用POI创建的折线图"); // 图表标题
        (false); // 图例是否覆盖标题

        // 4、图例设置
        XDDFChartLegend legend = ();
        (); // 图例位置:上下左右

        // 5、X轴(分类轴)相关设置
        XDDFCategoryAxis xAxis = (); // 创建X轴,并且指定位置
        ("日期(年月)"); // 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 = (xAxisData); // 设置X轴数据

        // 6、Y轴(值轴)相关设置
        XDDFValueAxis yAxis = (); // 创建Y轴,指定位置
        ("粉丝数(个)"); // Y轴标题
        Integer[] yAxisData = new Integer[]{
                10, 35, 21, 46, 79, 88,
                39, 102, 71, 28, 99, 57
        };
        XDDFNumericalDataSource<Integer> yAxisSource = (yAxisData); // 设置Y轴数据

        // 7、创建折线图对象
        XDDFLineChartData lineChart = (XDDFLineChartData) (, xAxis, yAxis);

        // 8、加载折线图数据集
        lineSeries = () (xAxisSource, yAxisSource);
        ("粉丝数", null); // 图例标题
        (true); // 线条样式:true平滑曲线,false折线
        ((short) 6); // 标记点大小
        (); // 标记点样式

        // 9、绘制折线图
        (lineChart);

        // 10、输出到word文档
        FileOutputStream fos = new FileOutputStream("H:\\poi\\");
        (fos); // 导出word

        // 11、关闭流
        ();
        ();
    }

}
(2)柱状图

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

package ;

import ;
import .*;
import ;
import ;

import ;

/**
 * @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 = (15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);

        // 3、图表相关设置
        ("使用POI创建的柱状图"); // 图表标题
        (false); // 图例是否覆盖标题

        // 4、图例设置
        XDDFChartLegend legend = ();
        (); // 图例位置:上下左右

        // 5、X轴(分类轴)相关设置
        XDDFCategoryAxis xAxis = (); // 创建X轴,并且指定位置
        ("日期(年月)"); // 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 = (xAxisData); // 设置X轴数据

        // 6、Y轴(值轴)相关设置
        XDDFValueAxis yAxis = (); // 创建Y轴,指定位置
        ("粉丝数(个)"); // Y轴标题
        (); // 设置图柱的位置:BETWEEN居中
        Integer[] yAxisData = new Integer[]{
                10, 35, 21, 46, 79, 88,
                39, 102, 71, 28, 99, 57
        };
        XDDFNumericalDataSource<Integer> yAxisSource = (yAxisData); // 设置Y轴数据

        // 7、创建柱状图对象
        XDDFBarChartData barChart = (XDDFBarChartData) (, xAxis, yAxis);
        (); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR

        // 8、加载柱状图数据集
        barSeries = () (xAxisSource, yAxisSource);
        ("粉丝数", null); // 图例标题

        // 9、绘制柱状图
        (barChart);

        // 10、输出到word文档
        FileOutputStream fos = new FileOutputStream("H:\\poi\\");
        (fos); // 导出word

        // 11、关闭流
        ();
        ();
    }
}
(3)饼状图

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

package ;

import ;
import .*;
import ;
import ;

import ;

/**
 * @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 = (15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);

        // 3、图表相关设置
        ("使用POI创建的饼图"); // 图表标题
        (false); // 图例是否覆盖标题

        // 4、图例设置
        XDDFChartLegend legend = ();
        (); // 图例位置:上下左右

        // 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 = (xAxisData); // 设置分类数据

        // 6、Y轴(值轴)相关设置:饼图中的圆形显示
        Integer[] yAxisData = new Integer[]{
                10, 35, 21, 46, 79, 88,
                39, 102, 71, 28, 99, 57
        };
        XDDFNumericalDataSource<Integer> yAxisSource = (yAxisData); // 设置值数据

        // 7、创建饼图对象,饼状图不需要X,Y轴,只需要数据集即可
        XDDFPieChartData pieChart = (XDDFPieChartData) (, null, null);

        // 8、加载饼图数据集
        pieSeries = () (xAxisSource, yAxisSource);
        ("粉丝数", null); // 系列提示标题

        // 9、绘制饼图
        (pieChart);

        // 10、输出到word文档
        FileOutputStream fos = new FileOutputStream("H:\\poi\\");
        (fos); // 导出word

        // 11、关闭流
        ();
        ();
    }
}
以上,就是使用Java和POI技术生成折线图,柱状图,饼状图导出到word文档的步骤 作者:Java_小朱同学 /read/cv14576099 出处:bilibili