问题描述
使用EasyExcel填充excel模板文件
信心代码如下
private static final String MODE_FILE_PATH = "templates/xxx.xls";
ExcelWriter excelWriter = null;
try {
InputStream modeFileIn = this.getClass().getClassLoader().getResourceAsStream(MODE_FILE_PATH);
//输出Excel流
OutputStream outputStream = getOutputStream(FILE_NAME, ".xls", resp);
excelWriter = EasyExcel.write(outputStream).withTemplate(modeFileIn).build();
//获取工作区对象
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//填充数据
excelWriter.fill(taxesInfoVO, writeSheet);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 千万别忘记关闭流
if (excelWriter != null) {
excelWriter.finish();
}
}
/**
* 设置响应流参数
*
* @param fileName 下载文件名
* @param fileType 文件格式,
* @param response 响应流
* @return
*/
public static OutputStream getOutputStream(String fileName, String fileType, HttpServletResponse response) {
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + fileType);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
return response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
调试报如下错误
分析
EasyExcel默认读取格式是xlsx,所以选择xls会导致异常也就是create workbook failure,但是如果非要是xls的格式的模板也可以避免这种异常。
excelWriter = EasyExcel.write(outputStream).withTemplate(modeFileIn).excelType(ExcelTypeEnum.XLS).build();