目录
使用EasyExcel读取Excel文件: 需要在maven项目中导入EasyExcel依赖
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>easyexcelartifactId>
- <version>2.2.6version>
- dependency>
接下来我们创建一个excle文件,名称为abc.xlsx.
填充如下内容:

根据Excel创建实体对象
- @Data
- public class abc {
- public String str;
- public String date;
- public int num;
- }
然后我们需要创建一个监视器对象,用来处理读取到数据.
- package com.example.station.util;
-
- import cn.hutool.core.collection.ListUtil;
- import com.alibaba.excel.context.AnalysisContext;
- import com.alibaba.excel.event.AnalysisEventListener;
- import com.example.station.model.Excel.abc;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.ListUtils;
-
- import javax.servlet.ReadListener;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.LinkedList;
- import java.util.List;
-
-
- // 自定义监听器
- // 继承 AnalysisEventListener 类, 传入需要监听的对象类型abc,重写其中的方法
- // 这里只需要重写 invoke() 和 doAfterAllAnalysed() 方法即可
- @Slf4j
- public class abclistener extends AnalysisEventListener
{ -
-
- private static final int BATCH_COUNT = 10;
-
- private List
cacheDataAbc = new ArrayList<>(BATCH_COUNT); -
-
-
- // 这个方法在每一条数据解析完之后会调用
- // 这里可以对数据进行处理
- //
- @Override
- public void invoke(abc abc, AnalysisContext analysisContext) {
- log.info("解析到一条数据:{}", abc);
- cacheDataAbc.add(abc);
- if (cacheDataAbc.size() >= BATCH_COUNT) {
- // 处理缓存的数据,当达到了限定的条数,可以批量插入数据库
- log.info("开始处理缓存数据");
-
- cacheDataAbc.clear();
- // 这里可以调用service层进行数据插入
-
- }
- }
-
- // 这个方法在所有数据解析完成之后会调用
- // 这里可以进行一些善后工作,比如关闭流等
- //
- @Override
- public void doAfterAllAnalysed(AnalysisContext analysisContext) {
- log.info("所有数据解析完成");
- }
- }
接下来我们就可以进行读取代码编写了:
- package com.example.station.util;
- import com.alibaba.excel.EasyExcel;
- import com.alibaba.excel.EasyExcelFactory;
- import com.example.station.model.Excel.abc;
-
- public class ExcelUtil {
- public static void main(String[] args) {
- String fileName = "C:\\Users\\Administrator\\Desktop\\abc.xlsx";
- // 读取Excel文件
- // 这里的abc.class是你要读取的实体类
- // new abclistener()是读取监听器
- // 这里的sheet()方法是指定读取的sheet页,默认是第1个
- // doRead()方法是读取Excel文件
- EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
- }
- }
以下为读取结果:
根据你要写入的结构创建实体类
- package com.example.station.model.Excel;
-
- import com.alibaba.excel.annotation.ExcelProperty;
- import com.alibaba.excel.annotation.format.DateTimeFormat;
- import lombok.Data;
-
- import java.util.Date;
-
- @Data
- public class abc {
- // 表头 通过注解 @ExcelProperty(value = "字符串") 来指定这一列的表头名称
- @ExcelProperty(value = "字符串")
- public String str;
-
- @ExcelProperty(value = "日期")
- public String date;
-
- @ExcelProperty(value = "数值")
- public int num;
- }
- package com.example.station.util;
- import com.alibaba.excel.EasyExcel;
- import com.example.station.model.Excel.abc;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.ListUtils;
-
- import java.util.*;
-
-
-
- @Slf4j
- public class ExcelUtil {
- public static void main(String[] args) {
- String fileName = "C:\\Users\\Administrator\\Desktop\\abc.xlsx";
- // 读取Excel文件
- // 这里的abc.class是你要读取的实体类
- // new abclistener()是读取监听器
- // 这里的sheet()方法是指定读取的sheet页,默认是第1个
- // doRead()方法是读取Excel文件
- EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
- log.error("读取完成 开始写入");
- // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
- // 这里data()是要写入的数据
- EasyExcel.write(fileName, abc.class).sheet("Sheet1").doWrite(data());
- log.error("写入完成 开始读取");
- EasyExcel.read(fileName, abc.class, new abclistener()).sheet().doRead();
-
- }
-
- // 生成要插入的Excel数据
- private static List
data() { - List
list = new ArrayList<>(); - for (int i = 0; i < 10; i++) {
- abc data = new abc();
- data.setStr("字符串" + i);
- data.setDate(new Date().toString());
- data.setNum(i+12);
- list.add(data);
- }
- return list;
- }
- }

可以看到数据写入成功 !