本文共 1111 字,大约阅读时间需要 3 分钟。
作为一个伟大又渺小的猿,竟然被这个问题困扰了接近三天,我太难了。
导出word生成文本数据、生成一张表都是soeasy,今天我这里记录的是生成文本和多张表。 废话不多说,先看看效果图:这里使用的技术是SpringBoot + poi-tl ,poi-tl(poi template language)是基于Apache POI的Word模板引擎,纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性。
实现这个操作运用了poi-tl的表格模板和文档模板。详情请看: 核心思想:文档模板就相当于一张纸,表格模板就相当于一个表格,我们在纸上画多个表格、写多个文字,文档模板将表格模板包裹住,相当于外包装。 导出之前,我们先创建两个word模板,这两个模板一定要区分清楚: 1.表格模板 ::::标准名称是文本信息,{ {#table}},这里的表达式类似于一个定位符,告诉程序我们要在这里开始画表,对应的java代码看后面 2.文档模板 ::::其他都是描述性文本,{ {+standardInfo}}是生成多张表的关键。作用于{ {#table}}类似 上代码:controller这些我就不写了,关键看看ServiceImpl中的逻辑
说明: RowRenderData.build()是一个构建函数,帮助我们构建表的结构,包括表头header,style,行数据等等。一个RowRenderData相当于一行数据,这里我将数据转换成一个List<RowRenderData>的集合,一个集合就相当于一张表格的数据,最后放在map中。 注意: map.put(“standardName”,standard.getName()); key:standardName一定要和表格模板上的名称{ {standardName}}一致, 同样: map.put(“table”,new MiniTableRenderData(header,listOne)); table要个表格模板中的{ {#table}}一致说明: 传过来的数据dataList是用于填充表格模板的,新建的map集合是用来填充文档模板的,最后将表格封装好的DocxRenderData对象加入map,map.put(“standardInfo”, standardInfo);注意:这里的key:standardInfo一定要和文档模板中的:{
{+standardInfo}}名称一致 最后收尾工作,输出到浏览器实现,访问我们controller层写的接口,就能实现下载一个word文档。转载地址:http://sukti.baihongyu.com/