SpringMVC 5.0.4集成easyexcel读取excel文档

来源:http://www.bj9420.com

编者: wRitchie(吴理琪)

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。Easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。Easyexcel的Github地址:https://github.com/alibaba/easyexcel。

EasyExcel优势

EasyExcel优势

· 注解式自定义操作。

· 输入输出简单,提供输入输出过程的接口

· 支持一定程度的单元格合并等灵活化操作

EasyExcel劣势

EasyExcel劣势

· 框架不成熟,1.1.0版本后提供灵活接口的只剩beta版本

· 依然存在一些bug

· 没有一套完整的api

第一步:pom.xml添加依赖,引入jar包:

第一步:pom.xml添加依赖,引入jar包:

easyexcel版本声明

版本依赖:

第二步:POJO对象编写:

第二步:POJO对象编写:

Student.java实体对象继承BaseRowModel,编写如下:

package com.bj9420.model;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
/**
* @Title: Student.java
* @Description: 学生用户POJO
* @author: wRitchie
* @date: 2019/5/6 14:44
* @version: V1.0
* @Copyright (c): 2019 http://bj9420.comm All rights reserved.
*/
public class Student extends BaseRowModel {
@ExcelProperty(value = "学籍编号", index = 0)
private String loginName;
@ExcelProperty(value = "姓名", index = 1)
private String realName;
@ExcelProperty(value = "性别", index = 2)
private String sex;
@ExcelProperty(value = "家长手机号", index = 3)
private String phoneNumber;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "Student{" +
"loginName='" + loginName + '\'' +
", realName='" + realName + '\'' +
", sex='" + sex + '\'' +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
}
第三步:编写监听器,实现对导入的excel文档的处理,示例如下:

第三步:编写监听器,实现对导入的excel文档的处理,示例如下:

package com.bj9420.excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.bj9420.constants.SystemConstant;
import com.bj9420.model.Result;
import com.bj9420.model.User;
import com.bj9420.service.user.IUserService;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Title: ExcelListener.java
* @Description: Excel Excel监听器
* @author: wRitchie
* @date: 2019/5/6 14:55
* @version: V1.0
* @Copyright (c): 2019 http://bj9420.com All rights reserved.
*/
public class ExcelListener extends AnalysisEventListener {
private IUserService userService;
private User sessionUser;
/**
* @Author: wRitchie
* @Description: ExcelListener 构造函数,从控制类传要调用的服务类
* @Param: [userService, sessionUser]
* @return:
* @Date: 2019/5/7 15:11
*/
public ExcelListener(IUserService userService,User sessionUser) {
super();
this.userService = userService;
this.sessionUser = sessionUser;
}
/** 自定义用于暂时存储datas,可以通过实例获取该值*/
private List datas = new ArrayList();
/**将处理结果返回给控制类*/
private Result