EasyExcel导出工具类(支持模板导出多Sheet导出)
最近写需求发现没有顺手excel导出工具类, 于是自己造了个小轮子, 链式一"."到底, 代码既注释
特点: 支持多sheet 支持从模板导出 支持分页拿数据, 避免数据量过大一次拿出导致内存溢出 数据类型支持业务实体类或Map, 无需easyExcel的注解, 低侵入
工具类使用演示
基于数据导出excel演示
@GetMapping("/exportDemo")
public R exportDemo(Map<String, Object> p, HttpServletResponse res) {
ExportChainUtil.export("用户信息", res) // 准备导出, 参数: excel文件名、HttpServletResponse res
.sheet("Map测试", Lists.newArrayList( // 导出Map数据
ImmutableMap.of("t1", 1, "t2", 2),
ImmutableMap.of("t1", 11, "t2", 22)
))
.column("字段1", i -> i.get("t1")) // 定义excel列
.column("字段2", i -> i.get("t2"))
.sheet("测试sheet1", Lists.newArrayList(
User.builder().name("张三").address("北京").build(),
User.builder().name("李四").address("山东").build()
)) // 导出excel第二个sheet, 参数: sheet的名称、数据, 数据可以是List<实体类>, 可以是List<Map<String, Object>>
.column("用户名", User::getName) // 参数: 第一列的名称、数据
.column("地址", User::getAddress) // 参数: 第二列的名称、数据
.sheet((pageNum, pageSize) -> bService.page(new Page<B>(pageNum, pageSize, false)).getRecords()) // 导出excel第三个sheet, 参数: 分页获取数据function
.column("主键", B::getId)
.column("代号", B::getCode)
.finish(); // 写入数据, 关闭excel文件流, 最后必须调用, 不然excel没数据
return R.ok();
}
导出的excel
基于模板导出演示
@GetMapping("/exportByTemplate")
public R exportByTemplate(Map<String, Object> p, HttpServletResponse res) {
ExportChainUtil.exportByTemplate("模板Demo Excel", "lib/money_template.xlsx", res)
.sheet(0)
.column((pageNum, pageSize) -> userService.page(new Page<TUser>(pageNum, pageSize, false)).getRecords())
.column("time", new Date())
.sheet(1)
.column(Lists.newArrayList(
ImmutableMap.of("money", "aaa", "test1", "sss"),
ImmutableMap.of("money", "aaa", "test1", "sss")
))
.column((pageNum, pageSize) -> userService.page(new Page<TUser>(pageNum, pageSize, false)).getRecords())
.finish();
return R.ok();
}
模板文件
模板路径
导出效果
导出用的数据
使用
maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.4</version>
</dependency>
导出工具类ExportChainUtil
over
