表格导出常用三方组建
目前比较流行的导出execl表格的框架比较多,如apache poi、Easypoi EasyExcel\
- apache poi 是最早出现的工具
- easypoi 的底层也是基于 apache poi 进行深度开发的,主要的特点就是将更多重复的工作全部简单化。
- easyexcel 是阿里巴巴开源的一款 excel 解析工具,底层逻辑也是基于 apache poi 进行二次开发的。不同的是,再读写数据的时候,采用 sax 模式一行一行解析,在并发量很大的情况下,依然能稳定运行.
三方组建区别
1、导出性能
apache poi 和 easypoi 导出大数据时会面临着严重的内存损耗问题。如果系统的并发量还不行,一旦导出大量数据,便会出现JVM频繁full gc,甚至导致OOM。一般百万级别的数据就已经OOM了。 当然easypoi也提供了大数据量导出的接口「exportBigExcel」,并可以分段写来避免一次性处理大量对象造成oom的问题,但是性能上不如EasyExcel。
- HSSF方式:这种方式导出的文件格式为office 2003专用格式,即.xls,优点是导出数据速度快,但是最多65536行数据
- XSSF方式:这种方式导出的文件格式为office 2007专用格式,即.xlsx,优点是导出的数据不受行数限制,缺点导出速度慢
- SXSSF方式:SXSSF 是 XSSF API的兼容流式扩展,主要解决当使用 XSSF 方式导出大数据量时,内存溢出的问题,支持导出大批量的excel数据 easyexcel 能大大减少占用内存,主要原因是再解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。easyExcel并且支持边读边写的方式,大大减少内存溢出的问题。
2、导出格式
- EasyExcel 导出的为
xlsx,在单sheet页上,理论上没有行数限制 - EasyPoi 这是比较常见的,导出格式为
xls,在条数超过6万行,会增加sheet页 - CSV导出,更常见了,一种以逗号分割格式的文件,不存在行数限制 值得注意的是,导出的文件大小,同样的条数,xlsx文件要比xls小很多。
3、使用方式
easypoi、EasyExcel 可基于注解实体类来导出、导入excel,并可以使用注解定制化表头样式。
类似与这种比较复杂的表头,一个sheet多张表,多个sheet,合并单元格各种复杂的情况下(性能较低),easypoi处理起来就比较复杂了,反观easyExcel就比较拿手。
4、使用建议
总体来说,easypoi和easyexcel都是基于apache poi进行二次开发的。
-
easypoi 在读写数据的时候,优先是先将数据写入内存,优点是读写性能非常高,但是当数据量很大的时候,会出现oom,当然它也提供了 sax 模式的读写方式,需要调用特定的方法实现。
-
easyexcel 基于sax模式进行读写数据,不会出现oom情况,程序有过高并发场景的验证,因此程序运行比较稳定,相对于 easypoi 来说,读写性能稍慢!
easypoi 与 easyexcel 还有一点区别在于,easypoi 对定制化的导出支持非常的丰富,如果当前的项目需求,并发量不大、数据量也不大,但是需要导出 excel 的文件样式千差万别,推荐使用 easypoi;反之,使用 easyexcel !
EasyExecl 使用
git 地址: github.com/alibaba/eas… 使用方式可以直接参考官网例子,比较详细了 easyexcel.opensource.alibaba.com/docs/curren…