模板文件
1690342020350导出测试.xlsx
导出文件
如下
1,横向遍历
#fe
使用#fe命令可以实现集合数据的横向拓展,比如模板代码是
{{#fe:maths t.score}}
导出的excel里面就会显示会自当前列,向右拓展,效果可参见下面的导出文件截图
2,横向遍历值
v_fe
使用v_fe命令可以实现不固定列的横向遍历,比如模板代码是
分数 | ID |
---|---|
{{#fe:maths t.score | t.id}} |
这种情况导出的excel就会两列一起向右拓展,效果可参见上面的导出文件截图的最下面一行
3,删除行
方法一:删除空白行
book.getSheetAt(0).removeRow(book.getSheetAt(0).getRow(12))
只是清空第13行内容,行还在
方法二:这行高度设为0
book.getSheetAt(0).getRow(12).setHeight((short)0);
推荐此方法,打印出来的效果就是看不到这行,对于打印功能来说足够了
方法三:shiftRows 删除后下方单元格上移
book.getSheetAt(0).shiftRows(12,book.getSheetAt(0).getLastRowNum(),5);
api说明
sheet.shiftRows(startRow,endRow,shiftCount)
参数说明:
startRow:移动的开始行号,从0开始计算, 如果想要删除Excel中的第8行(rownum=7),那么starRow设定为7,即设定为你想删除的那行
endRow: 移动的结束行号,从0开始计算。通过startRow和endRow选定移动的范围。可以用sheet.getLastRowNum:来取得sheet的结尾行号 shiftCount 移动多少行。正数是往下移动的行数,负数是往上移动的行数
这个方法也不能实现真正的删除行
4,日期格式
{{fd:(report_date;yyyy-MM-dd)}}
report_date就是new Date()
通过这个模板命令可以直接转换成想要的日期格式
5,保留几位小数
模板命令
{{#fe:chineses {{fn:(t.score;###.00)}}}}
两个0代表保留两位小数
如果是在sql中处理,那么可以使用round函数,记住一定要加别名
select round(score,2) scoreValue from table
如果是在代码中
String.format("%.2f",(double)(i+70)).toString()
6,换行显示
由于easypoi无法直接实现换行显示list数据,所以只能曲线救国,知道每行显示多少个后,在代码里对list进行截取,在模板里每行使用不同的list
map.put("maths",res.subList(0,8))
map.put("maths2",res.subList(8,16))
map.put("maths3",res.subList(16,res.size()))
详细代码
def main(){
Map<String,Object> map = new HashMap()
map.put("class_code","GRADE1")
map.put("model","初三")
map.put("report_date",new Date())
map.put("sample_num",30)
map.put("chinese_standard_value",90)
map.put("math_standard_value",80)
// 数学测试数据
def res = []
for(int i=0;i<20;i++){
def data = ["id":i,"score":String.format("%.2f",(double)(i+70)).toString()]
res.add(data)
}
map.put("maths",res.subList(0,8))
map.put("maths"+"2",res.subList(8,16))
map.put("maths"+"3",res.subList(16,res.size()))
// 语文测试数据
def res2 = []
for(int i=0;i<20;i++){
def data = ["id":i,"hello":i+"Hello","score":(i+80.2589).toString()]
res2.add(data)
}
map.put("chineses",res2.subList(0,8))
map.put("chineses"+"2",res2.subList(8,16))
map.put("chineses"+"3",res2.subList(16,res2.size()))
// return map
def filePrefix = new Date().format("yyyyMMddHHmmss")
def file = resFileGetter.getByName('1690342020350导出测试.xlsx');
def templateUrl = file.getAbsolutePath();
String sheetName = "班级成绩报告";
TemplateExportParams params = excelApi.buildTmpExportParams(templateUrl,sheetName)
params.setColForEach(true);
def book = ExcelExportUtil.exportExcel(params, map);
def fileName = "班级成绩报告"+filePrefix+".xlsx"
ExcelUtils.downLoadExcel(fileName, response, book);
}