实习第二周 NO.2 Plus
项目组长刚把以前的excel模板发给我的时候,看得我是目瞪口呆,一度以为那是一种我不懂得新的语言。后来才知道它是这么个东东
“ExcelUtils代表着一类的报表生成工具,他使用报表本身作为模板。对于它,只能处理Excel文件,它以Excel文件为模板,在其上加以自己的定义语言,简单通俗!”
ExcelUtils官网
使用起来也很简单,就是先在excel的表格里写好自己的excelutils模板,然后准备好要传入的数据集合,最后通过export()方法实现生成导出就好啦。
定义excel模版(在excel中使用自定义标签)
1.遍历list(迭代输出list中数据)
#foreach detail in ${list}
${detail.name} ${detail.qty} ...
#end
在#foreach和#end之间获取detail对象的属性,还有以下几种特殊的变量:
${detailId}——list的索引
${detailIndex}——序号
${detailStartRowNo}——遍历时开始行号
${detailEndRowNo}——遍历结束行号
2.获取变量的值
${printDate}
${model.name}
${map(key)}——获取value
其中${!model.name}:如果该值和上一个数值相同,则合并该单元格;可以取某一个年份的,自动合并该单元格
3.取和(针对某一列)
#formula SUM(C${detailStartRowNo}:C${detailEndRowNo})
4.取和(针对某一行)
#formula SUM(C${currentRowNo}:F${currentRowNo})
5.遍历对象的所有属性(兼容poi高版本导致#each标签失效)
#each ${model}
6.遍历对象符合条件的属性,${width1}代表合并几个单元格
#each ${model} on ${keys}
#each ${model} ${width1},${width2}... on ${keys}
7.If标签
①#if (${a.tranType}=="201" || ${a.tranType}=="203")
#end
②#formula IF(${sex}=1,"男","女")需注意sex字段为数值类型
8.根据条件统计数值
#sum qty on ${list} where name=test
#sum qty on ${list} where name like test
#sum qty on ${list} where name like ${value}
9.调某一个方法
#call service.getStr("str",${aaa})
#call service.getModel("str",${aaa}).name
Java代码导出示例
public String prExport() throws Exception {
try {
/数据处理部分start/
Person person = this.personService.search(appDis.getPersonId());
/数据处理部分end/
/工具 start/
ExcelUtils.addValue("exportDate", DateUtil.getNowDate("yyyy年M月d日"));
ExcelUtils.addValue("person", person);
/工具 end/
String path = ServletActionContext.getServletContext().getRealPath("WEB-INF");
String config = path+"\xls\prAppDis.xls";//已定义好的模板
String fileName = "聘用合同办理备案表"+System.currentTimeMillis()+".xls";
File file = new File(Resource.PATH+"\d_rs_app_dis");
if(!file.exists() && !file.isDirectory()){
System.out.println("//不存在");
file.mkdirs();
}else{
System.out.println("//目录存在");
}
File exportFile = new File(Resource.PATH+"\d_rs_app_dis",fileName);
if(!exportFile.exists()){
exportFile.createNewFile();
}
FileOutputStream fo = new FileOutputStream(exportFile);
ExcelUtils.export(config, fo);
fo.close();
/至此文件已导出成功/
} catch (Exception e) {
LogUtil.exception(e);
status = e.getMessage();
}
return SUCCESS;
}
导出报表
public String exporCountPerson() throws Exception{
//这个方法就是使用POI动态生成excel的模板,里面已经拼好了ExcelUtils的标签,参数就是要拼接到表头以及数据信息
trStatisticsService.exportTrstatistics(headList,headerList,dicList);
//给excel模板中的标签list赋值
ExcelUtils.addValue("list", this.mapList);
//使用ExcelUtils输出文件
String path = ServletActionContext.getServletContext().getRealPath("");
String config = path + "\\template\\trstatisticsNum.xls";
File file = new File(path, "trstatisticsNum.xls");
if (file.exists()) {
file.delete();
}
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
ExcelUtils.export(config, fo);
fo.close();
this.excelFile = new FileInputStream(file);
this.downloadFileName = new String("各单位各类培训持证人数汇总报表.xls".getBytes(), "ISO8859-1");
return "exportExcel";
}