Poi-tl生成docx文档【SpringBoot】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在开发过程中当遇到系统需要导出一些word文档类型的报表文件,且这些文档多用来展示数据,具有相同的逻辑,可以考虑使用poi-tl填充word模板的方法来生成word文档。


提示:以下是本篇文章正文内容,下面案例可供参考

一、poi-tl是什么?

poi-tl(poi template language)是Word模板引擎,基于Apache POI,提供更友好的API。
官方文档: https://deepoove.com/poi-tl/

二、使用步骤

1. 梳理导出文档逻辑关系,编写文档模板

常用文档内容按类型分类大致有:普通文本内容、循环文本内容、表格、图表、图片 5种类型。
下面我将举例说明这五种不同类型如何使用填充到word模板中,我的 "月度分析报告模板.docx"文档内容如下:
月度分析报告模板.docx

2. 代码实现

2.1导入依赖

Maven配置如下:

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.12.2</version>
</dependency>

Gradle导入:

implementation 'com.deepoove:poi-tl:1.12.2'

2.2数据填充

代码如下(示例):

package com.shiy.test.service;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.ChartMultiSeriesRenderData;
import com.deepoove.poi.data.Charts;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class PoiTlService {
    public void export() throws IOException {

        Map<String, Object> dataMap = new HashMap<>();

        //文本
        dataMap.put("province", "重庆");
        dataMap.put("current_year", 2024);
        dataMap.put("current_month", 8);

        dataMap.put("product", "大豆");
        dataMap.put("quantity", 3434.678);
        dataMap.put("sales", 2234.32);

        //循环(文本示例)
        List<Map<String, Object>> list = new ArrayList<>();
        for(int i=0; i<3; i++){
            Map<String, Object> sectionMap = new HashMap<>();
            sectionMap.put("xhcs", i+1);
            sectionMap.put("xhnr", "内容"+(i+1));
            list.add(sectionMap);
        }
        dataMap.put("list",list);

        //表格,利用表格行循环插件实现,插件需要单独注册
        Configure config = Configure.builder()
                .bind("table1Data", new LoopRowTableRenderPolicy()).build();
        List<Map<String, Object>> list1 = new ArrayList<>();
        for(int i=0; i<3; i++){
            Map<String, Object> sectionMap = new HashMap<>();
            sectionMap.put("id", i+1);
            sectionMap.put("name", "名称"+(i+1));
            sectionMap.put("content", "内容"+(i+1));
            list1.add(sectionMap);
        }
        dataMap.put("table1Data", list1);

        //图形,创建多系列图形
        ChartMultiSeriesRenderData chartLine = Charts
                //标题,x轴
                .ofMultiSeries("实际预测偏差曲线", new String[] { "1:00", "2:00", "3:00", "4:00" })
                //数据序列
                .addSeries("实际", new Double[] { 15.0, 6.0, 12.8, 20.6 })
                .addSeries("预测", new Double[] { 223.0, 119.0, 100.6, 160.9 })
                .create();
        dataMap.put("chartLine", chartLine);

        //图片
        dataMap.put("img1", "B:/Desktop/OIP-C.jpg");

        //利用模板生成数据
        XWPFTemplate.compile("B:\\Desktop\\月度分析报告模板.docx", config).render(dataMap)
                .writeToFile("B:\\Desktop\\月度分析报告结果.docx");

    }

}


三、输出"月度分析报告结果.docx"文档如下:

月度分析报告结果.docx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值