EasyExcel读写文件
EasyExcel读写文件
1.概述
这篇文章介绍使用EasyExcel工具类读写Excel文件,EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。他是在Apache poi基础上做了一层封装相比poi最大的有点就是节省内存。
摘要
- 引入依赖
- 写入Excel
- 读取Excel
2.引入依赖
EasyExcel是在poi的基础上做了封装,因此导入依赖时需要导入poi依赖和EasyExcel依赖。
<!--poi依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--EasyExcel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
3.写入Excel
通过示例介绍使用EasyExcel向Excel表格写入数据,两个步骤。
- 创建实体类:实体类作用定义Excel表格结构
- 操作Excel类,向Excel写入数据
3.1.创建Excel实体类
实体类的设计主要是根据表格存储数据字段来设计,和数据库实体类设计思想一样。
例如表格存储字段有序号、姓名、年龄,那么设计实体类时就添加这几个字段的属性,并提供get和set方法。
package com.bruce.easy_excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @author bruce
* @create 2022/1/6 18:43
*/
@Data
public class ExcelEntity {
//通过EasyExcel注解设置Excel表格表头名称
@ExcelProperty("序号")
private Integer id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
}
3.2.操作Excel写入数据
定义好Excel实体类后,向Excel表格写入数据非常简单,只需要调用write方法就可以将数据写入Excel文件。
package com.bruce.easy_excel;
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
/**
* @author bruce
* @create 2022/1/6 19:32
*/
public class WriteExcel {
public static void main(String[] args) {
//设置写入Excel表格路径和Excel表格名称
String fileName = "E:/write.xlsx";
/**
* 调用EasyExcel的write方法向Excel写入数据
* - write方法传入两个参数,第一个是Excel名称,第二个参数是实体类
* - sheet方法用来设置Excel表格sheet名称
* - doWrite方法接收向表格写入的数据,是一个List集合类型
*/
EasyExcel.write(fileName,ExcelEntity.class).sheet("人员信息统计").doWrite(excelData());
}
//向Excel表格写入的数据封装到List集合
private static List<ExcelEntity> excelData() {
ExcelEntity excelEntity = new ExcelEntity();
excelEntity.setId(1);
excelEntity.setName("张三");
excelEntity.setAge(19);
List<ExcelEntity> list = new ArrayList<>();
list.add(excelEntity);
return list;
}
}
4.读取Excel
通过示例介绍使用EasyExcel读取Excel表格数据,三个步骤。
- 创建实体类:实体类作用定义Excel表格结构,并通过索引将属性和Excel表格表头列绑定。
- 创建读取操作的监听器
- 调用实现最终的读取
4.1.创建实体类
实体类的属性要和Excel表头名称对应,同时使用 @ExcelProperty注解将实体类的属性和表格表头绑定。
package com.bruce.easy_excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @author bruce
* @create 2022/1/6 18:43
*/
@Data
public class ExcelEntity {
//通过EasyExcel注解设置Excel表格表头名称,同时使用index索引将属性名称和表格表头绑定映射关系
@ExcelProperty(value = "序号",index = 0)
private Integer id;
@ExcelProperty(value = "姓名",index = 1)
private String name;
@ExcelProperty(value = "年龄",index = 2)
private Integer age;
}
4.2.创建读取操作的监听器
创建监听器类继承AnalysisEventListener类,该类的方法用于输出读取Excel的内容。
- invoke方法:输出读取Excel表格内容
- invokeHeadMap方法:输出读取Excel表格表头名称
- doAfterAllAnalysed方法:读取内容后的操作
package com.bruce.easy_excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author bruce
* @create 2022/1/6 20:19
*/
public class ExcelListener extends AnalysisEventListener<ExcelEntity> {
List<ExcelEntity> list = new ArrayList<>();
//逐行读取Excel表格数据
@Override
public void invoke(ExcelEntity excelEntity, AnalysisContext analysisContext) {
System.out.println("逐行读取Excel表格内容"+excelEntity);
list.add(excelEntity);
}
//读取Excel表格表头名称
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表格表头名称"+headMap);
}
//读取完成之后执行的操作
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
4.3.读取Excel内容
使用EasyExcel的read方法读取Excel表格内容
package com.bruce.easy_excel;
import com.alibaba.excel.EasyExcel;
/**
* @author bruce
* @create 2022/1/6 20:33
*/
public class ReadExcel {
public static void main(String[] args) {
//设置读取Excel表格路径和Excel表格名称
String fileName = "E:/write.xlsx";
/**
* 调用reade方法读取Excel表格内容,三个参数作用如下
* - fileName:指定读取Excel在哪里
* - 实体类:用哪个实体类解析数据
* - 监听器:调用监听器读取数据
* - sheet:不写名称默认读取第一个sheet
* -读取Excel表格数据完成后文件流会自动关闭
*/
EasyExcel.read(fileName,ExcelEntity.class,new ExcelListener()).sheet().doRead();
}
}
4.4.读取Excel结果
表格表头名称{0=序号, 1=姓名, 2=年龄}
逐行读取Excel表格内容ExcelEntity(id=1, name=张三, age=19)
Process finished with exit code 0