admin管理员组文章数量:1618704
场景是使用一个模板,生成多个sheet页面的导出文件
步骤1 复制模板按纪录数量生成多sheet的模板
private String generateNewTemplateFile(List<Map<String, String>> sheetMapList, String templateDir) throws IOException {
File templateFile = new File(templateDir);
Workbook workbook = WorkbookFactory.create(new FileInputStream(templateFile));
for (int i = 0; i < sheetMapList.size(); i++) {
workbook.cloneSheet(0);
}
String newTemplateFile = "test.xls";
workbook.write(new FileOutputStream(newTemplateFile));
return newTemplateFile;
}
步骤2 使用easyexcel填充模板,代码如下
private String generateResultReport(List<Map<String, String>> sheetMapList, String newTemplateFilePath, String resultFileName) throws Exception {
ExcelWriter excelWriter = EasyExcel
.write(resultFileName)
.withTemplate(newTemplateFilePath)
.build();
for (int i = 0; i < sheetMapList.size(); i++) {
Map<String, String> map = sheetMapList.get(i);
excelWriter.fill(map, EasyExcel.writerSheet(i).build());
}
excelWriter.finish();
return resultFileName;
}
这里会出现异常如下
com.alibaba.excel.exception.ExcelGenerateException: Create workbook failure
at com.alibaba.excel.context.WriteContextImpl.<init>(WriteContextImpl.java:87)
at com.alibaba.excel.write.ExcelBuilderImpl.<init>(ExcelBuilderImpl.java:35)
at com.alibaba.excel.ExcelWriter.<init>(ExcelWriter.java:47)
at com.alibaba.excel.write.builder.ExcelWriterBuilder.build(ExcelWriterBuilder.java:130)
...
Caused by: org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x0000000000000000, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:151)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:294)
at com.alibaba.excel.util.WorkBookUtil.createWorkBook(WorkBookUtil.java:53)
at com.alibaba.excel.context.WriteContextImpl.<init>(WriteContextImpl.java:85)
问题分析及解决
问题原因写的比较清楚,easyexcel读取的模版文件不是OLE2格式,意思是excel格式有误。开始排查:
1.查看原模版文件是否正常,打开查看及测试直接导出可以。
2.这里判断生成的新模板文件是否有问题,因为生成后占用不能直接打开,可以查看副本,确认文件正常
3.使用代码判断新模版文件是否是OLE2格式,判断返回true,至此有点卡住了,明明是正常的文件,但是easyexcel就是报错。
4.判断POI版本与easyexcel版本中的依赖是否冲突之类的。。。排除一系列问题,不是。
解决方法
偶尔想到生成模板的代码,这个新模板的文件名是固定的,如果多次导出文件占用,会不会是同一文件不能同时读写操作导致的,修改此处
String newTemplateFile = "test.xls";
改为
String newTemplateFile = "test"+ System.currentTimeMillis() +".xls";
神奇的事情发生了,问题解决了,导出正常了。
本文标签: 异常模板EasyExcelExcelGenerateExceptionfailure
版权声明:本文标题:easyexcel使用模板导出时出现异常ExcelGenerateException: Create workbook failure 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728782839a1172944.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论