基于 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模板文件,填充数据的思路