目录
读出Excel文档
写入Excel文档
读出Excel文档
使用EasyExcel读取Excel文件: 需要在maven项目中导入EasyExcel依赖
<!-- EasyExcel依赖包 -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version>
</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<abc> {private static final int BATCH_COUNT = 10;private List<abc> cacheDataAbc = new ArrayList<>(BATCH_COUNT);// 这个方法在每一条数据解析完之后会调用// 这里可以对数据进行处理//@Overridepublic void invoke(abc abc, AnalysisContext analysisContext) {log.info("解析到一条数据:{}", abc);cacheDataAbc.add(abc);if (cacheDataAbc.size() >= BATCH_COUNT) {// 处理缓存的数据,当达到了限定的条数,可以批量插入数据库log.info("开始处理缓存数据");cacheDataAbc.clear();// 这里可以调用service层进行数据插入}}// 这个方法在所有数据解析完成之后会调用// 这里可以进行一些善后工作,比如关闭流等//@Overridepublic 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();}
}
以下为读取结果:
写入Excel文档
根据你要写入的结构创建实体类
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<abc> data() {List<abc> 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;}
}
可以看到数据写入成功 !