Easypoi开箱&实战

222 阅读2分钟

我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!

前言

一直都想用Easypoi实现导出/导入Excel和Word文件,可是项目里一直没有用上,很多时候都是自己写方法去实现,所以今天跟大家一起来看看这个号称很Easy又好用的开源框架EasyPoi到底是不是真的很easy上手。

首先,思考一个问题,在没有开源框架的辅助下我们是如何完成Excel表格数据的生成以及导出的?

我们得绘制表格,然后依次创建sheet、row、cell,然后通过与数据库的字段映射,填充数据,最后将生成的Excel文件以流或者文件的方式提供出去,这种方法的缺点显而易见,每增加或者减少字段我们都得从service层改到mapper层,下图是生成手动自定义生成Excel文件的部分代码。

image.png

image.png

上面的代码杂又乱,虽然说可以很灵活的使用,但是还是有一定的局限性,那有没有更加简单实现方案呢?当然有,EasyPoi就能,那接下来我们看看Easypoi是如何实现Excel数据的导出的。

我们先来认识一下关于 @Excel 里的一些注解,我们可以看到,注解里有针对数字,时间以及列或行合并的,使用起来很方便 image.png

EasyPoi具体实现:

一.引用easypoi的依赖,现在的easypoi已经有支持spring boot的starter了

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.1.2</version>
</dependency>

二.注解及映射实体

/**
 * @ExcelTarget即数据对应的表
 */
@Data
@ExcelTarget("user")
public class User {
    @Excel(name="编号")
    private String id;
    @Excel(name="姓名")
    private String user_name;
    //可以直接对数据库的字段进行时间格式化
    @Excel(name="生日",format = "yyyy-MM-dd",width = 15.0)
    private Date birthday;
    @Excel(name="联系地址",width=20.0)
    private String address;
}

三.调用其封装的方法,进行Excel生成,包括标题,sheet以及数据填充导出

 @RequestMapping("/export")
    public void exportExcel(HttpServletResponse response) throws IOException {
        List<User> userList = userService.findAll();
        Workbook workbook = null;
        ServletOutputStream outputStream = null;
        //生成excel
        //对应三 执行结果里的标题,sheet名称
        try {
            workbook = ExcelExportUtil.exportExcel(new ExportParams("测试标题", "测试用户信息"), User.class, userList);
            //浏览器下载及乱码处理
            response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("用户信息列表.xls", "UTF-8"));
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (Exception e) {
            throw new IOException(e);
        } finally {
            outputStream.close();
            workbook.close();
        }
    }
}

四.执行结果

image.png

五.注意事项

目前Easypoi在大数据导入导出方面有点缺陷,数据量过多,容易OOM,问题出在文件流部分,如果数据量过大的话可以将这部分改为多线程或异步执行。

小结

从上面可以看到,想要导出一个Excel使用Easypoi只需要两步,而且EasyPoi里还提供了很多对数据处理的注解,真的是处理起来方便又简洁,Easypoi是真的easy,项目里有导入导出功能的话就用Easypoi试试吧。