EasyExcel简介
- easyExcel是阿里巴巴开源poi插件之一,当前最新版本1.1.2-beta5,poi版本3.17,因此,集成时老版本poi需要提升poi版本,或者做版本隔离。
- 吐槽一下这个版本没有RELEASE版本
- 主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错
- 主要解决方式:通过解压文件的方式加载,一行一行的加载,并且抛弃样式字体等不重要的数据,降低内存的占用
- 具体实现原理,建议看github上的readme
EasyExcel优势
- 注解式自定义操作。
- 输入输出简单,提供输入输出过程的接口
- 支持一定程度的单元格合并等灵活化操作
EasyExcel劣势
- 框架不成熟,1.1.0版本后提供灵活接口的只剩beta版本
- 依然存在一些bug
- 没有一套完整的api
ExcelUtil快速使用
- maven引用(版本控制内若存在低版本POI,请升级版本和代码,官方POI版本3.17):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
- 工具类:
详见底部附带的github地址 - 实体类继承BaseRowModel ,对需要导出或者导入的字段增加@ExcelProperty注解,index值为对应excel中的列,value为表头,format为日期格式化
public class PersonDto extends BaseRowModel{
/** id */
@ExcelProperty(index = 0 , value = "id")
private String id;
/** 姓名 **/
@ExcelProperty(index = 1 , value = "姓名")
private String name;
/** 生日 **/
@ExcelProperty(index = 2 , value = "生日" , format = "yyyy-MM-dd")
private String birth;
}
导出:
ExcelUtil.writeExcel(response,exportVoList,"导出文件名","sheet1", ExcelTypeEnum.XLSX , PersonDto .class);
导入:
List<FundDto> importDtoList = ExcelUtil.readExcel(excelFile,PersonDto .class);
自定义样式注解:
- 在对应列上增加注解,修改对应的列上的参数,例
public class PersonDto extends BaseRowModel{
/** id */
@ExcelProperty(index = 0 , value = "id")
private String id;
/** 姓名 **/
@ExcelProperty(index = 1 , value = "姓名")
private String name;
/** 生日 **/
@ExcelProperty(index = 2 , value = "生日" , format = "yyyy-MM-dd")
@CellStyleFormat(fillBackgroundColor= IndexedColors.LIGHT_YELLOW)
@CellFontFormat(fontColor=IndexedColors.BLACK)
private String birth;
}
Ps.
- 后续有新的需要,可以就自定义注解的修改增加新的功能
目前已知存在问题:
- 自定义注解目前未经过多种场景的测试,出现问题,需要再修改
- 导入的实体类中配置了注解的属性为基本类型时,可能会读到一部分空行,这个问题目前需要EasyExcel的看看后续版本处理
EasyExcel github地址:https://github.com/alibaba/easyexcel
EasyExcelUtils github项目地址:https://github.com/wangxiaoxiongjuly/easyExcelUtils