前言
最近公司有个需求需要使用到EasyExcel的模板填充功能,使用过程中遇到了本地环境调试和打包上传服务器发布后失效的一些坑,这里记录一下,希望对遇到这些问题的人有所帮助。一、easyExcel是什么?
废不多说直接上干货,对于暂时不太了解的童鞋可以参考官方文档,链接:easyExcel官网入口
二、使用步骤
1.引入库
代码如下:
<!--pom中引入jar-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
2.Excel文件模板与pom配置
如下:
Excel文件模板
pom配置(该配置主要针对maven项目打包后会把文件进行编码,此处配置过滤掉编码
3.代码
try {
//此处getResourceAsStream 用于获取服务器打包后的Excel模板文件流;
//如果采用getPath方法获取文件地址本地ieda环境可以获取到,上传到服务器后会失效。采用流可以都生效,具体原因暂未仔细查看。有兴趣的童鞋可以自己去尝试!
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("templates/XXXX.xlsx");
//String path = this.getClass().getClassLoader().getResource("templates/XXXX.xlsx").getPath();
//读取Excel 根据指定模板导出
ExcelWriter excelWriter = EasyExcel.write(ExcelUtils.getOutputStream("XXXX",httpServletResponse)).withTemplate(resourceAsStream).build();
//ExcelWriter excelWriter = EasyExcel.write(ExcelUtils.getOutputStream("XXXX",httpServletResponse)).withTemplate(path).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//直接写入Excel数据(list是我查询并需导出的数据,并且里面的字段和excel需要导出的字段对应)
excelWriter.fill(list, writeSheet);
excelWriter.finish();
} catch (Exception e) {
throw e;
}
//此段代码是工具类ExcelUtils中的 用于输出Excel流
public static OutputStream getOutputStream(String fileName, 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 + ".xls");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
return response.getOutputStream();
} catch (IOException e) {
log.error("导出excel表格失败", e);
}
}