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

经验分享 程序员 微信小程序 职场和发展