基于 POI 实现一个 Excel 模板引擎

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 POI 实现一个 Excel 模板引擎相关的知识,希望对你有一定的参考价值。

参考技术A

新建一个 excel 文档 template.xlsx ,作为模板:

实现
这是一个简单的置换型模板引擎,将指定模板内容(Excel文件)中的特定标记(单元格内的字符串)替换一下便生成了最终需要的业务数据。

模板分为5个部分:

(1) 创建静态方法 process ,根据模板生成 excel 文件

因为一个模板中可能有多个工作表(Sheet),所以遍历每一个 sheet,依次进行置换
(2)创建方法 processSheet ,处理单个工作表
处理单个工作表的流程是:
a. 遍历每个有内容的单元格,并获取到单元格的值cellValue
b. 如果 cellValue 不是字符串类型,则跳过这个单元格,处理下一个单元格
c. 如果这个单元格包含非列表型置换标记(形如 $cls.headmaster ),直接对该单元格执行置换
d. 如果这个单元格包含列表型置换标记(形如 $cls.students[#].name ),将单元格存入 listRecord 中备用
e. 单元格遍历完毕
f. 遍历 listRecord 中存储的单元格(包含列表型置换标记),计算出当前单元格所在行下,需要插入的行数(取决于数组的元素个数,因为一行之中可能存在多个数组,因此要去最大值)并插入;同时记录下当前单元格的样式(列表同一列的样式相同),当前单元格的置换标记(例如 cls.students#name ,代表这一列取 students 内元素的 name 属性)
此时: 已完成非列表型字段的置换,已为列表型字段插入所需行,效果如下:

g. 置换列表。再次遍历 listRecord 中存储的单元格,从当前单元格开始依次向下置换,并应用 f 中存储的样式。

(1)置换单元格 fillCell(Cell, String, Object) .

(2)给单元格设置值 setCellValue(Cell, Object) .

(3)通过反射获取对象的属性值 getAttributeByPath(Object, String) .

以上是关于基于 POI 实现一个 Excel 模板引擎的主要内容,如果未能解决你的问题,请参考以下文章

java hutool poi 基于excel模板文件,填充数据的思路

SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

poi-tl—一个超级好用开源的Word模板引擎

Word 模板引擎 poi-tl

freeMarker生成word,excel文档

java用poi实现将数据库里面的数据导入已经存在的excel模板中。最好有实例参考,谢谢。