大家好,我是开源大叔。
今天给大家分享一个非常好用的Excel解析开源项目:EasyExcel。
概述
大家常用的读写Excel的可能是POI,但是POI有一些缺点:比较耗内存。
EasyExcel则针对POI的缺点进行了优化,减少内存的占用,并且做了更多的封装,使用起来很方便。接下来跟着大叔来看看怎么使用吧。
快速入门
加入依赖
1 | <dependency> |
读Excel
1 | private static void read(){ |
运行结果如下:
{0=张三, 1=18, 2=北京}
{0=扬四, 1=19, 2=上海}
{0=王五, 1=20, 2=广州}
{0=刘六, 1=21, 2=深圳}
写Excel
1 | private static void wirte(){ |
运行效果如下:
上面减少的都是最简单的读写操作,不一定能满足日常需要,接下来我们来看看它是否还有其他高级的设置呢?
高级使用
- 读取 excel 的时候是否可以直接把表格中的数据读取成自己的实体对象呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class User {
private String username;
private Integer age;
private String address;
}
private static void readV2(){
String fileName = "/Users/erpang/excel-simple/src/main/resources/user.xlsx";
List<User> list = EasyExcel.read(fileName,User.class, new ReadListener<User>() {
public void invoke(User o, AnalysisContext analysisContext) {
log.info("读取到的数据:{}", JSON.toJSONString(o));
}
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("读取完成");
}
}).sheet().headRowNumber(0).doReadSync();
} - 如果导出的时候头信息要怎么操作呢?
在类属性上加上注解 @ExcelProperty就可以了EasyExcel还有其他强大功能,这里就不一一介绍了,接下来大叔来说一下常用的api,后续大家可以自己去尝试1
2
3
4
5
6
private String username;
private Integer age;
private String address;
- EasyExcel 入口类,用于构建开始各种操作
- ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据
- ExcelProperty 指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名
- ExcelIgnore 默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
- NumberFormat 数字转换
- DateTimeFormat 日期转换
大叔总结
今天就介绍到这里了,处理Excel在日常开发中很常见,选择一个简单易用的工具可以提高自己的工作效率,EasyExcel 正好符合这个要求,不近使用方便,并且性能强大 节省内存空间,是一个不错的选择。