目录
在各种系统当中,Excel 的导入与导出功能是最为基础的功能,无论是商品信息的导入、工资的导出,实在太常见了。在 Java 项目中,可以完成 Excel 导入导出的类库有很多种,这里来介绍一下 阿里巴巴 开源的 EasyExcel ,该库的特点如下:
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便
https://github.com/alibaba/easyexcel
从上面可以看出,EasyExcel 占用内存方面比 Apache poi、jxl 要小很多,在使用上也较为简单。本篇文章通过简单的实例,来快速的上手 EasyExcel 的使用。下面给一个 EasyExcel 内存使用图,该图来自 EasyExcel 的官网,如下图。
一、引入依赖
使用 EasyExcel 的第一步就是引入依赖。我们创建一个 SpringBoot 的项目,然后在 pom.xml 文件中引入 EasyExcel 的依赖,依赖如下:
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
引入依赖后就可以按照套路来使用 EasyExcel 了。
二、创建 Excel 对应的实体类
在各种系统中,导入导出的数据一般都是通过 Excel 来完成的,在实现具体的导入导出功能前,首先是确定要导入导出哪些数据,也就是确定 Excel 文件的数据格式。在实际的导入导出功能中,数据一般是通过查询数据库获取的,这部分功能由程序员自己来完成实现,而 Excel 的导入导出实际是由类库帮助我们完成。
同样的,对于导入导出功能,我们需要将我们指定的数据格式告诉导入导出 Excel 的类库。那么,首先需要建立一个和 Excel 表格对应的数据格式实体类。这里来写一个简单的学生类。
@Data
public class Student {
/**
* 姓名
*/
@ExcelProperty("姓名")
private String name;
/**
* 性别
*/
@ExcelProperty("性别")
private Integer gender;
/**
* 电话
*/
@ExcelProperty("电话")
private String phone;
}
在上面定义的实体类中通过 @ExcelProperty 注解来指定属性对应的 Excel 中列的名称。EasyExcel 还提供了类似设置 列宽、列高 等注解,比如:
@ContentRowHeight(10)
@HeadRowHeight(20)
@ColumnWidth(25)
具体各种注解的用法及细节可以参考官网文档进行学习和了解。
三、导出数据为 Excel
有了与 Excel 对应的实体类后,我们先来完成一个导出 Excel 的功能。这里,我们创建一个测试用例,来模拟将数据导出为 Excel 的过程。
@Test
void Export()
{
List<Stude