使用poi-tl导出复杂的表格

2,052 阅读1分钟

poi-tl

我们在实际开发过程中很少会在导出文档的时候很多时候不只是导出一个很简单的表格,经常会遇到一些多级表头的导出,同时一个 word 文档中存在多个表格的情况.
比如当前情况下需要导出一个这样的 word 文档,其中有两个表格,并且是多级表头的情况下,使用模板进行导出.

image.png

Demo

这个导出其实和单个导出差不多,区别在于这是多列多行,同时又有两个表格.
思路: 生成两个数组对象存储对应的数据,然后再模板中使用表格导出的方式进行导出,需要注意的就是数组写在标题中的最后一列中,具体的数值则使用表格导出的语法.
后端代码的写法如下:

List<UserInfo> userArr = new ArrayList();
List<cjInfo> cjArr = new ArrayList();
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
ConfigureBuilder configureBuilder = Configure.builder()
                                    .bind(userArr, policy)
                                    .bind(cjArr, policy);
dataMap.put("userArr",userArr);
dataMap.put("cjArr",cjInfo);
XWPFTemplate template = XWPFTemplate.compile("D:\template.docx").render(dataMap);
try {
    template.writeAndClose(new FileOutputStream("D:\out.docx"));
}catch (Exception e){
    e.printStackTrace();
}

这样写声明 cjArruserArr 是两个表格对象,我们就可以在表格里面使用,对应的UserInfo 对象中有对应的 name,age,sex 属性,同时cjInfo 中对应着有 name,sx,yy,ls,zz 几种属性,然后我们拿这两个已经包装好的属性给到报告中,使用模板的方法进行填充.
模板中写法如下:

image.png

导出对应的效果就是上面那种效果,同时如果我们要添加某些样式也可以直接在模板中进行添加,比如标题加粗的话直接在模板中设置好,就像下面这样:

image.png

对应出来的效果:

image.png