1、easyExcel导出Excel表格

easyExcel导出Excel表格

参照简书:https://www.jianshu.com/p/882db0771b80

官网:https://github.com/alibaba/easyexcel

首先easyExcel能快速、简单的导出Excel,避免了OOM(内存溢出)的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模式。在上层做了模型转换的封装,让使用者更加简单方便

使用的依赖

前提是创建一个SpringBoot项目。

<!--easyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>

Controller

@Controller
public class UserController {
public List<User> getAllUser() {
List<User> userList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
User user = User.builder().name("张三" + i).password("1234").age(i).build();
userList.add(user);
}
return userList;
}
}

pojo

注意事项,实体类需要继承BaseRowModel,@Data和@Builder的作用是,@Data为实体类提供get/set方法,toString、构造方法。而@Builder能够方便批量创建实体类。

@ExcelProperty为Excel设置表头信息

@Data
@Builder
public class User extends BaseRowModel{
@ExcelProperty(value = "学号",index = 0)
private Integer id;
@ExcelProperty(value = "姓名",index = 1)
private String name;
@ExcelProperty(value = "密码",index = 2)
private String password;
@ExcelProperty(value = "年龄",index = 3)
private Integer age;
}

Test

读Excel

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java

写Excel

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

web上传、下载

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java

@SpringBootTest
class ExcelDemoApplicationTests {
// 注入controller类用来调用返回list集合的方法
@Autowired
private UserController userController;
@Test
public void contextLoads() {
// 文件输出位置
OutputStream out = null;
try {
out = new FileOutputStream("d:\\test.xlsx");
ExcelWriter writer = EasyExcelFactory.getWriter(out);
// 写仅有一个 Sheet 的 Excel 文件, 此场景较为通用
Sheet sheet1 = new Sheet(1, 0,User.class);
// 第一个 sheet 名称
sheet1.setSheetName("第一个sheet");
// 写数据到 Writer 上下文中
// 入参1: 数据库查询的数据list集合
// 入参2: 要写入的目标 sheet
writer.write(userController.getAllUser(),sheet1);
// 将上下文中的最终 outputStream 写入到指定文件中
writer.finish();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
// 关闭流
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
posted @   站着说话不腰疼  阅读(975)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示