一行代码完成 Java的 Excel 读写--easyexcel

最近我在 Github 上查找一个可以快速开发 excel 导入导出工具,偶然发现由阿里开发 easyexcel 开源项目,尝试使用后感觉这款工具挺不错的,下面分享一下我的 easyexcel 案例使用。

1、easyexcel 简介

一般在项目可能会涉及到 Excel 导入和导出,通常我们都是使用 Apache POI 或者 jxl。但他们都存在一个严重的问题就是非常的耗内存,POI 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但 POI 依旧存在一些缺陷,比如 07 版 Excel 解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。而 easyexcel 重写了 POI 对 07 版 Excel 的解析,能够原本一个 3M 的 Excel 用 POI SAX 依然需要 100M 左右内存降低到 KB 级别,并且再大的 Excel 不会出现内存溢出,03 版依赖 POI 的 SAX 模式。在上层做了模型转换的封装,使用起来更加方便。

一行代码完成 Java的 Excel 读写--easyexcel_第1张图片

2、项目结构

一行代码完成 Java的 Excel 读写--easyexcel_第2张图片

2.1、pom.xml

一行代码完成 Java的 Excel 读写--easyexcel_第3张图片

2.2、模型

@Data 是 Lombok 插件的注解,需要先安装。@Data 注解在类上,会为类的所有属性自动生成 set/get、equals、canEqual、hashCode、toString方法。

一行代码完成 Java的 Excel 读写--easyexcel_第4张图片

一行代码完成 Java的 Excel 读写--easyexcel_第5张图片

一行代码完成 Java的 Excel 读写--easyexcel_第6张图片

RowNumExcelListener

使用 easyexcel,我们需要继承 AnalysisEventListener 。必须实现 invoke() 和 doAfterAllAnalysed() 方法。easyexcel 会调用 invoke() 将数据存入 List 中。

一行代码完成 Java的 Excel 读写--easyexcel_第7张图片

2.3、读操作

当只读取一个 Excel 的一个sheet,可以直接 EasyExcelFactory.readBySax() 方法解析 Excel 文件。

一行代码完成 Java的 Excel 读写--easyexcel_第8张图片

读取多个 sheet,需要通过读取所有 sheet,再进行选择读取哪些数据,读取完一个 sheet,需要重新清空列表,不然会导致所有 sheet 数据都存储在列表中。

一行代码完成 Java的 Excel 读写--easyexcel_第9张图片

2.4、写操作

根据模型的写入,通过 ExcelWriter 的 wirter() 方法,ExcelWriter 根据 sheet 预先设置的 模型生成和插入数据。

一行代码完成 Java的 Excel 读写--easyexcel_第10张图片

推荐)根据模板的写入,根据一个 Excel 文件为模板,生成 Excel 文件。

一行代码完成 Java的 Excel 读写--easyexcel_第11张图片

easyexcel 还支持对单元格的样式的控制,通过 WriteHandler 接口实现。但是 easyexcel 所支持的样式要比 POI 少,官方也不是不推荐使用 easyexcel 进行实现复杂的 Excel。easyexcel 主要为了解决 OOM 的问题,实现低消耗读取解析文件。

一行代码完成 Java的 Excel 读写--easyexcel_第12张图片

一行代码完成 Java的 Excel 读写--easyexcel_第13张图片

如何实现通过浏览器下载 Excel 文件,案例中使用的文件输出流,要实现网络下载,只需要把对应的输出流改为获取 Response 进行输出即可。

3、小结

一般在项目实现 Excel 导入导出功能,easyexcel 是可以胜任的,easyexcel 有着这处理海量数据?? Excel 的能力和更高一级的封装,可以让我们更快的上手,easyexcel 适用于解析海量数据 Excel 场景,如果需要实现生成复杂的 Excel 文件,最好还是使用 POI 比较好。

更加详细的信息可以查看 github 上的内容,GitHub链接为 https://github.com/alibaba/easyexcel。

ps:需要完整代码,关注公众号:哈尔的数据城堡(data_dev),回复‘easyexcel’获得~

你可能感兴趣的:(一行代码完成 Java的 Excel 读写--easyexcel)