新建一个 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 获得一行的单元格个数不对、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)