-
根据模板导出会在导出数据前面加数据记录数量的空白行,比如说我导出3条记录,那么导出的数据表头下面有三行空白行后面才是跟着我导出的记录
具体如下图所示:
模板图示↓
导出数据如示↓
用的方法是
/** * 导出文件通过模板解析,不推荐这个了,推荐全部通过模板来执行处理 * * @param params * 导出参数类 * @param pojoClass * 对应实体 * @param dataSet * 实体集合 * @param map * * 模板集合 * @return */ org.jeecgframework.poi.excel.ExcelExportUtil#exportExcel(org.jeecgframework.poi.excel.entity.TemplateExportParams, java.lang.Class<?>, java.util.Collection<?>, java.util.Map<java.lang.String,java.lang.Object>)
注意:用上面的方法会导致导出数据莫名其妙多出来空行
后面改用方法:
/**
* 导出文件通过模板解析只有模板,没有集合
*
* @param params
* 导出参数类
* @param map
* 模板集合
* @return
*/
org.jeecgframework.poi.excel.ExcelExportUtil#exportExcel(org.jeecgframework.poi.excel.entity.TemplateExportParams, java.util.Map<java.lang.String,java.lang.Object>)
解决了问题. 按照作者的意思第一个指定类型和集合的方法是不推荐使用了^~^,没写原因也不知道是为啥.
2.改用上面的方法之后导出一条数据的时候完美导出,想着导出一页的数据导出,遇到了报错(我必须要说明的是在使用第一个方法的时候模板格式是可以导出想要的记录的,只不过会多出来空白行,在我换第二个方法之后遇到这个碧油鸡)
报错信息如下:
ERROR o.j.p.e.export.template.ExcelExportOfTemplateUtil:183 - firstMovedIndex, lastMovedIndex out of order
java.lang.IllegalArgumentException: firstMovedIndex, lastMovedIndex out of order
at org.apache.poi.ss.formula.FormulaShifter.<init>(FormulaShifter.java:83)
at org.apache.poi.ss.formula.FormulaShifter.createForRowShift(FormulaShifter.java:113)
at org.apache.poi.xssf.usermodel.XSSFSheet.shiftRows(XSSFSheet.java:3030)
at org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil.addListDataToExcel(ExcelExportOfTemplateUtil.java:356)
at org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil.setValueForCellByMap(ExcelExportOfTemplateUtil.java:317)
at org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil.parseTemplate(ExcelExportOfTemplateUtil.java:242)
at org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil.createExcleByTemplate(ExcelExportOfTemplateUtil.java:172)
at org.jeecgframework.poi.excel.ExcelExportUtil.exportExcel(ExcelExportUtil.java:169)
产生的直接后果就是在创建Workbook
对象的时候失败返回null~
注意我上面的模板中遍历用的是$fe
从autopoi
官方教程中的指令介绍
空格分割
三目运算 {{test ? obj:obj2}}
n: 表示 这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
fn: 格式化数字 {{fn:(obj;###.00)}}
fe: 遍历数据,创建row
!fe: 遍历数据不创建row
$fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
#fe: 横向遍历
v_fe: 横向遍历值
!if: 删除当前列 {{!if:(test)}}
单引号表示常量值 '' 比如'1' 那么输出的就是 1
&NULL& 空格
]] 换行符 多行遍历导出
sum: 统计数据
中可以看到$fe
是下移插入,把当前行,下面的行全部下移.size()行,然后插入
解决方法: 模板中使用fe
指令遍历数据 最后模板修改为
解决问题. 这周把代码贴出来