球友好,我是二哥呀,EasyExcel-Plus 正式更名为 FastExcel,并且作者正在发力推广。那作为一名同样喜欢开源的爱好者,我必须得为他们的开源精神做一点点微薄的贡献,那就是通知一声你(😄。
要知道,FastExcel 的前身 EasyExcel 在 GitHub 上有多达 32.9k star,深受开发者的喜爱。
只不过在今年早些时候,作者从阿里离职了,阿里也因此官宣 EasyExcel 走到了生命的尽头,毕竟维护开源项目需要付出巨大的精力和时间。
看了一眼 EasyExcel 的提交记录,多达 1196 次,不容易啊。
刚好技术派中缺少导出 Excel 这一趴,于是我就索性亲自上阵把它实现了。
代码我已经提交到了 GitHub,Spring Boot 后端和 React 都有。你可以拉取最新的 main 分支查看,网上也有很多类似的例子,但要不只有前端,要不只有后端,没有完整的 web 示例。对于新手或者小白来说,还是不知道该怎么使用。
入口放在了技术派 admin 端的首页, PVPU 这块刚好有一个 echarts,可以下载近 7 天、30 天、90 天、180 天的历史数据。
完成这个小功能,简历上就可以写上这么一条:
使用 FastExcel 实现 PUPV 数据的批量导出功能,500 万条数据导出仅需 1 秒,并结合自定义线程池+ CountDownLatch 进行并发处理,导出性能提升近 60 倍。
你看,简历含金量是不是瞬间就提起来了。
实现起来也非常简单。
01、后端代码实现
第一步,在需要 FastExcel 的 module 中引入依赖。
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>${fastexcel.version}</version>
</dependency>
按照关键字在技术派的源码中搜就可以找得到了。
第二步,在处理下载请求的 controller 中添加接口,注意看 HttpServletResponse 返回对象都设置了哪些属性。
@GetMapping("pvUvDayDownload2Excel")
public void pvUvDayDownload2Excel(@RequestParam(name = "day", required = false) Integer day,
HttpServletResponse response) throws IOException {
response.reset();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("技术派", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 获取数据
day = (day == null || day == 0) ? DEFAULT_DAY : day;
statisticsSettingService.download2Excel(day, response);
}
①、response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
:设置响应的内容类型为 Excel 文件的 MIME 类型。
②、response.setCharacterEncoding("utf-8");
:
设置响应的字符编码为 UTF-8。
③、String fileName = URLEncoder.encode("技术派", "UTF-8").replaceAll("\\+", "%20");
:
对文件名进行 URL 编码,并将加号替换为 %20,以确保文件名在 URL 中正确显示。
④、response.setHeader(&
回复