前言
在工作中,使用excel表格处理数据是很常见的操作,本文就来讲解下如何使用开源轮子实现下载、导入、导出的功能。
在之前,很多Java程序员都喜欢使用POI的类库来操作excel,但是非常的不方便,不仅代码写的很臃肿,还要处理各种office版本兼容问题,最怕的就是使用不当很容易造成内存溢出,因此今天给大家推荐阿里的一款开源项目 easyexcel。
项目介绍
easyexcel是一款快速、简单避免OOM的java处理Excel工具
github地址:https://github.com/alibaba/easyexcel
Star:15.2k
看了下,两天前项目团队还有在完善代码,可见项目还是挺活跃的
项目集成
使用idea开发工具简单创建了一个easyexcel-demo项目,加入了web模块以及easyexcel maven依赖,依赖如下:
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.4</version>
</dependency>
好了,我们就开始写功能了。
1、实现已有Excel模板下载
很多系统有数据批量导入的场景,因为在页面上批量加数据时间成本太大了,但是一般导入的时候得按照一定的格式改,所以一般好的产品会先让用户下载一个带有格式的文档,然后按照格式写好以后上传导入,我们来实现这个功能吧!
创建模板文件
首先我们创建一个模板文件,内容如图:
将模板文件放置在项目里
然后我们把它放在项目的配置文件下,如图:
然后下载代码也很简单,主要分为加载资源->读取资源->写入响应流
/**
* 下载模板
*/
@GetMapping("/downloadTemplate")
public void downloadTemplate(HttpServletResponse response) throws Exception {
ClassPathResource classPathResource = new ClassPathResource("excelTemplate/easyexcel.xls");
InputStream inputStream = classPathResource.getInputStream();
Workbook workbook = new HSSFWorkbook(inputStream);
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode("easyexcel.xls", "utf-8"));
response.setHeader("Access-Control-Expose-Headers", "content-Disposition");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
测试
输入网址 http://localhost:8080/excel/downloadTemplate 进行测试:
2.写入数据并生成文件
将数据导出到文档这种场景可以说是最常见的了,那么怎么使用easyExcel快速实现呢,我们同样还是以上面的模板为例
定义模型映射对象 UserExcelModel
@Data
public class UserExcelModel extends BaseRowModel implements Serializable {
@ExcelProperty(value =