轻松实现将数据导出为Excel文件(EasyExcel篇)
·
先附上阿里EasyExcel的GitHub地址:https://github.com/alibaba/easyexcel
目录
什么是EasyExcel
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便(以上都是复制)
环境准备
- 引入easyExcel和Lombok源,我这里用的是maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
- Springboot(非必须)
开始写代码
创建实体类User:
package com.excel.excel.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class User {
@ExcelProperty("用户昵称")
private String userName;
@ExcelProperty("密码")
private String password;
@ExcelProperty("登录名称")
private String loginName;
@ExcelProperty("电话号码")
private String telephone;
@ExcelProperty("创建日期")
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date createDate;
}
@ExcelProperty表示的是表头信息。
接下来是Controller类:
package com.excel.excel.test;
import com.alibaba.excel.EasyExcel;
import com.excel.excel.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
public class TestController {
@RequestMapping("/test1")
public void test(HttpServletResponse response) throws IOException {
List<User> userList = setEntityValue();
response.setContentType("application/vnd.ms-excel");
// 对响应客户请求进行重新编码
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("测试导出", "utf-8");
// 为导出文件设置默认名称,这里是测试导出
response.setHeader("Content-disposition", "attachment;filename="+fileName+".xlsx");
EasyExcel.write(response.getOutputStream(), User.class).sheet("测试页").doWrite(userList);
}
private List<User> setEntityValue(){
List<User> userList = new ArrayList<>();
for(int i = 0; i < 10; i++){
User user = new User();
user.setCreateDate(new Date());
user.setLoginName("测试" + i + "号");
user.setPassword("123456");
user.setTelephone("1231561213");
user.setUserName("用户" + i + "号");
userList.add(user);
}
return userList;
}
}
如果你想将结果直接输出到本地某个文件,可以这样:
@RequestMapping("/test2")
public void test2() throws IOException {
List<User> userList = setEntityValue();
EasyExcel.write("D:/test.xlsx", User.class).sheet("测试页").doWrite(userList);
}
测试
分别在浏览器的url上输入http://localhost:8080/test1和http://localhost:8080/test2.
test1结果为:

test2的结果为:

结尾
那么EasyExcel的导出就到此为止,如果想了解更多功能,可以到GitHub中去看,我这里就不一一描述啦。喜欢的小伙伴们可以点个赞哦。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)