poi-tl 动态生成表格 行和列都不确定

poi-tl 动态生成表格 行和列都不确定

使用poi-tl 将docx文档模板生成word文档,生成动态的表格,行数不确定,列数不确定,记录下。

1 引入pom

java 复制代码
        <!-- Poi-tl -->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.10.5</version>
        </dependency>

2 模板 和 效果

  1. 文档模板添加

    {{#table}}

  2. 生成的文档

3 看代码

java 复制代码
package com.test;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.data.Rows;
import com.deepoove.poi.data.Tables;
import org.apache.commons.collections4.list.TreeList;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DynamicColumnsWordExample {

    public static void main(String[] args) throws IOException {
        Map<String,Object> map = new HashMap<>();


        // 标题 初始化
        List<String> titleList = new TreeList<>();
        titleList.add("序号");
        titleList.add("姓名");
        for (int i = 0; i < 10; i++) {
            titleList.add(i+1+"动态列");
        }
        String [] cell = new String[titleList.size()];
        for (int i = 0; i < titleList.size(); i++) {
            cell[i]= titleList.get(i);
        }
        // 构建 标题行
        RowRenderData tableHead = Rows.of(cell).center().bgColor("3672e5").create();

        // 表格数据 初始化
        List<String> nameList = Arrays.asList("张三","李四","王武");
        List<RowRenderData> renderDataList = new TreeList<>();
        for (int i = 0; i < nameList.size(); i++) {
            List<String> list = new TreeList<>();
            list.add(i+1+"");
            list.add(nameList.get(i));
            for (int j = 0; j < 10; j++) {
                list.add(j+1+"数据");
            }
            String [] rowData = new String[list.size()];
            for (int j = 0; j < list.size(); j++) {
                rowData[j] = list.get(j);
            }
            RowRenderData row = Rows.of(rowData).center().create();
            renderDataList.add(row);
        }
        // 表格行 构建
        RowRenderData [] tableRows = new RowRenderData[renderDataList.size()+1];
        // 添加标题行
        tableRows[0] = tableHead;
        // 添加数据行
        for (int i = 0; i < renderDataList.size(); i++) {
            tableRows[i+1] = renderDataList.get(i);
        }
        map.put("table", Tables.of(tableRows).center().create());



        // 使用模板生成Word文档
        XWPFTemplate template = XWPFTemplate.compile("D:\\test_word\\test_template.docx").render(map);
        FileOutputStream out = new FileOutputStream("D:\\test_word\\test_out.docx");

        template.write(out);
        out.flush();
        out.close();
        template.close();
    }
}

如果你也学到了,麻烦点个赞,谢谢!

相关推荐
爱学英语的程序员5 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
Java新手村5 小时前
基于 Vue 3 + Spring Boot 3 的 AI 面试辅助系统:实时语音识别 + 大模型智能回答
vue.js·人工智能·spring boot
消失的旧时光-19435 小时前
第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)
spring boot·redis·缓存
wxin_VXbishe6 小时前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
森焱森6 小时前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
Coder_Boy_7 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例
java·人工智能·spring boot·后端·spring
金牌归来发现妻女流落街头7 小时前
【Springboot基础开发】
java·spring boot·后端
是梦终空8 小时前
计算机毕业设计264—基于Springboot+Vue3+协同过滤的房屋租赁管理系统(源代码+数据库+万字论文+设计文档)
spring boot·毕业设计·vue3·课程设计·毕业论文·协同过滤·房屋租赁管理系统
qq_297574678 小时前
【实战】POI 实现 Excel 多级表头导出(含合并单元格完整方案)
java·spring boot·后端·excel