参考官网上的内容
官网地址如下:
https://yuque.com/easyexcel
git地址:
https://gitcode.net/mirrors/alibaba/easyexcel?utm_source=csdn_github_accelerator
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址:[https://github.com/alibaba/easyexcel]
对应的导入的jar包同样也有提供
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
具体代码参考官网上的demo
https://www.yuque.com/easyexcel/doc/read
1)根据excel里的内容,创建对应的实体类
2)创建对应的监听类,并且实现ReadListener接口并且需要在监听器内,invoke方法和
doAfterAllAnalysed方法,其中invoke方法当EasyExcel解析了一条数据后就会执行, doAfterAllAnalysed方法,在所有数据都解析完成后会执行。
官网提供了多种方式与Excel中的列对应上
/**
* 强制读取第三个 这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配
*/
@ExcelProperty(index = 2)
/**
* 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据
*/
@ExcelProperty("字符串标题")
编写监听器继承AnalysisEventListener
public class ExcelListener extends AnalysisEventListener<TbClueExcelVo> {
/**
* 每解析一行数据都要执行一次
* @param data
* @param context
*/
@Override
public void invoke(TbClueExcelVo data, AnalysisContext context) {
xxx
}
/**
* 当所有数据都解析完成后会执行
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
xxx
}
}
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@ExcelProperty("ID")
private Integer id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("性别")
private String gender;
}
监听器
public class DataReadListener extends AnalysisEventListener<User> {
@Override
public void invoke(User user, AnalysisContext analysisContext) {
System.out.println("invoke");
System.out.println(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("doAfterAllAnalysed");
}
}
main方法
public class ReadExcelDemo1 {
public static void main(String[] args) {
EasyExcel.read(new File("E:/上传的文件名.xlsx"), new DataReadListener()).head(User.class).sheet(0).doRead();
}
}
写excel
/**
* 写入Excel
*/
public class WriteExcelDemo1 {
public static void main(String[] args) {
EasyExcel.write(new File("E:/笑傲江湖.xlsx"), User.class).sheet("笑傲江湖").doWrite(getData());
}
public static List<User> getData(){
List<User> userList = new ArrayList<>();
userList.add(new User(1,"白眉鹰王", 58, "男"));
userList.add(new User(2,"青翼蝠王", 45, "男"));
userList.add(new User(3,"金毛狮王", 55, "男"));
userList.add(new User(4,"紫衫龙王", 48, "女"));
return userList;
}
}