poi-tl填充动态word表格数据

起因:想要把List<String>类型的数据填充进word表格中,并且可根据列来动态扩展表格的行数

引入依赖
<dependency>
      <groupId>com.deepoove</groupId>
      <artifactId>poi-tl</artifactId>
      <version>1.10.4</version>
</dependency>

这里引入的版本事1.10.x,不同的版本代码写法也会有所差别,具体可详见官网

示例:
public static void main(String[] args) throws IOException {

        String str1 = "文章包括各种文体的著作、作品,如诗歌、戏剧、小说、科学论文,记叙文、议论文、说明文、应用文等等";
        String str2 = "“千古文章未尽才”、“文章千古事”、“文章憎命达”、“板凳要坐十年冷、文章不写一字空”、“积句而成章、积章而成篇”、“言出为论";
        String str3 = "下笔成章”等、都是现在所说的文章的意思、更广义的文章、"+""+"、“奥秘”等意思、如“洞明世事皆学问、人情练达即文章”、''";
        Map<String,String> stringMap1 = new HashMap<>();
        stringMap1.put("index",str1);
        stringMap1.put("index1",str2);
        stringMap1.put("index2",str3);
        List<String> key = new ArrayList<>();
        key.add("index");
        key.add("index1");
        key.add("index2");
        //所有字符串的长度是固定的,只取其一就可,获取长度
        int length = str1.split("、").length;

        //模板替换
        replay(key,stringMap1,length);

    }
public static void replay(List<String> keys,Map<String,String> params,int length) throws IOException{
        List<Map<String,Object>> list = new ArrayList<>();
        for (int i = 0;i <= length - 1;i++){
            Map<String,Object> map = new HashMap<>();
            //将不同key的同样位置的元素取出封装成一个map
            for (String key : keys){
                String[] split = params.get(key).split("、");
                map.put(key,split[i]);
            }
            //将map封装成list
            list.add(map);
        }

        //将数据再次封装为list
        Map<String,Object> data = new HashMap<>();
        data.put("var",list);

        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();//创建一个列表的规则
        Configure config = Configure.builder().bind("var", policy).build();

        //模板替换
        XWPFTemplate template = XWPFTemplate.compile("D:/chsu/test.docx",config)
                .render(data);
        //输出文件
        FileOutputStream replace = new FileOutputStream("D:/chsu/test5.docx");
        template.write(replace);
        template.getConfig();
        replace.flush();
        template.close();
    }
模板配置:

在这里插入图片描述

结果数据样式:

在这里插入图片描述

这里的业务里面,数组的长度是固定的,如果遇到多个数组长度不固定,这里提供两种解决思路

1 可以将所有的数组长度调整为一致,就是补空字符串

2 通过比较找到长度最大的那个数组,但在循环时要注意判空

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值