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

基于 POI 实现一个 Excel 模板引擎,第1张

新建一个 excel 文档 templatexlsx ,作为模板

实现

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

模板分为5个部分:

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

因为一个模板中可能有多个工作表(Sheet),所以遍历每一个 sheet,依次进行置换

(2)创建方法 processSheet ,处理单个工作表

处理单个工作表的流程是:

a 遍历每个有内容的单元格,并获取到单元格的值cellValue

b 如果 cellValue 不是字符串类型,则跳过这个单元格,处理下一个单元格

c 如果这个单元格包含非列表型置换标记(形如 ${clsheadmaster} ),直接对该单元格执行置换

d 如果这个单元格包含列表型置换标记(形如 ${clsstudents[#]name} ),将单元格存入 listRecord 中备用

e 单元格遍历完毕

f 遍历 listRecord 中存储的单元格(包含列表型置换标记),计算出当前单元格所在行下,需要插入的行数(取决于数组的元素个数,因为一行之中可能存在多个数组,因此要去最大值)并插入;同时记录下当前单元格的样式(列表同一列的样式相同),当前单元格的置换标记(例如 clsstudents#name ,代表这一列取 students 内元素的 name 属性)

此时: 已完成非列表型字段的置换,已为列表型字段插入所需行,效果如下:

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

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

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

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

package comlinyistest1;

import orgapachepoihssfusermodelHSSFCell;

import orgapachepoihssfusermodelHSSFRow;

import orgapachepoihssfusermodelHSSFSheet;

public class HssfCells

{

public void getCellValues(HSSFSheet sheet)

{

if(sheet == null)

{

Systemoutprintln("sheet is null");

return ;

}

for(int i = 0 ; i < sheetgetLastRowNum() ; i ++)

{

HSSFRow row = sheetgetRow(i) ;

if(row == null)

{

Systemoutprintln("单元格第" + (i+1)+ "行为空");

}

else

{

for(int j = 0 ; j < rowgetLastCellNum() ; j ++)

{

HSSFCell cell = rowgetCell(j) ;

if(cell == null)

{

Systemoutprintln("单元格第" + (i+1)+ "行 " + (j+1) + "列为null");

}

else

{

String s = cellgetCellType() == HSSFCellCELL_TYPE_STRINGcellgetStringCellValue():cellgetNumericCellValue()+"";

Systemoutprintln("单元格第" + (i+1)+ "行 " + (j+1) + "列值为" + s);

}

}

}

}

}

}

以上就是关于基于 POI 实现一个 Excel 模板引擎全部的内容,包括:基于 POI 实现一个 Excel 模板引擎、java poi 读取excel 获得一行的单元格个数不对、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10171633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存