easyexcel简单使用
1、EasyExcel简介
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
github地址: https://github.com/alibaba/easyexcel
官方文档: https://www.yuque.com/easyexcel/doc/easyexcel
Excel解析流程图(找的别人的):
EasyExcel读取Excel的解析原理:
2、EasyExcel简单使用
2.1、添加依赖
添加maven依赖, 依赖的poi最低版本3.17
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
2.2、创建读写用的实体类
使用以下这个样式写即可
public class UserVo{
@ExcelProperty(value = "编号") // 这里的ExcelProperty代表该属性为一个数据列,
private Integer uid; //里面的value值代表数据列的标题
@ExcelProperty(value = "姓名")
private String userName;
@ExcelProperty(value = "性别")
private String sex;
// get set ...
// 构造函数...
}
2.3、写入
两种写法,其实看的出来,步骤没有区别
/**
* 写法一
*/
public static void main(String[] args) {
// 创建测试数据
List<UserVo> userVos = Arrays.asList(
new UserVo("0001", "张三", "男"),
new UserVo("0002", "李四", "男"),
new UserVo("0003", "王五", "女"),
new UserVo("0004", "赵六", "女")
);
// 设置文件名
String fileName = "D:\\test\\userVo.xlsx";
// 调用EasyExcel操作
EasyExcel.write(fileName,UserVo.class) // 写入操作 参数为文件名和导出数据的class
.sheet("用户数据") // 设置导出的excel文件中的sheet页名称
.doWrite(userVos); // 执行写入,参数为写入的数据(List集合)
}
/**
* 写法二
*/
public static void main(String[] args) {
// 创建测试数据
List<UserVo> userVos = Arrays.asList(
new UserVo("0001", "张三", "男"),
new UserVo("0002", "李四", "男"),
new UserVo("0003", "王五", "女"),
new UserVo("0004", "赵六", "女")
);
String filename = "D:\\study\\excel\\user2.xlsx";
// 创建ExcelWriter对象
ExcelWriter excelWriter = EasyExcel.write(filename, UserVo.class).build();
// 创建Sheet对象
WriteSheet writeSheet = EasyExcel.writerSheet("用户数据").build();
// 向Excel中写入数据
excelWriter.write(userVos, writeSheet);
// 关闭流
excelWriter.finish();
}
效果:
2.4、读取
2.4.1、先创建监听器
public class UserListener extends AnalysisEventListener<UserVo> {// 继承自带的监听器,并设置泛型
/**
* 将每一行数据读取封装到参数中
* 该方法为必须重写
* @param userVo
* @param analysisContext
*/
@Override
public void invoke(UserVo userVo, AnalysisContext analysisContext) {
System.out.println(userVo);// 将每行数据进行输出查看
}
/**
* 读取表头
* @param headMap
* @param context
*/
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println(headMap);
}
/**
* 在读取完成之后的操作写在这
* 该方法为必须重写
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("读取完成了!!!");
}
}
2.4.2、创建测试方法
public static void main(String[] args) {
// 创建文件路径
String fileName = "D:\\test\\userVo.xlsx";
// 创建监听器
UserListener userListener = new UserListener();
// 调用easyexcel中的方法
EasyExcel.read(fileName,UserVo.class,userListener)// read方法表示读取,这边调用的参数是文件路径、读取的类型,以及读取用的监听器(就是我们定义的)
.sheet() // 里面可以有参数 sheet页的索引,或者sheet页的名字,不填就是默认
.doRead(); // 执行读取
}
效果:
由此我们得知发生顺序
先读取表头,再读取数据,读取完成之后还可以进行操作
3、总结
相较于自己封装POI 或者直接使用别人的封装好的,都面临着POI基础的理论不熟的困扰。
而easyexcel就解决了这个问题。而且它不仅仅可以使用默认样式,还可以使用自定义样式。
这个就需要更加深入的学习了,如果仅仅是使用这样就OK了。