新建类实现AnalysisEventListener
package com.js.port.imports.service.excel;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
public final class ExcelListener<T> extends AnalysisEventListener<T>{
/**
* 自定义用于暂时存储data
* 可以通过实例获取该值
*/
private List<T> datas = new ArrayList<>();
/**
* 每解析一行都会回调invoke()方法
*
* @param object 读取后的数据对象
* @param context 内容
*/
@Override
@SuppressWarnings("unchecked")
public void invoke(Object object, AnalysisContext context) {
T map = (T) object;
//数据存储到list,供批量处理,或后续自己业务逻辑处理。
datas.add(map);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
//解析结束销毁不用的资源
//注意不要调用datas.clear(),否则getDatas为null
}
/**
* 返回数据
*
* @return 返回读取的数据集合
**/
public List<T> getDatas() {
return datas;
}
/**
* 设置读取的数据集合
*
* @param datas 设置读取的数据集合
**/
public void setDatas(List<T> datas) {
this.datas = datas;
}
}
service层
public List<Map<String,Object>> readExcelData(InputStream inputStream) {
final String methodName = "readExcelData";
LOGGER.enter(methodName, "业务开始[start]");
ExcelListener<DtoExcel> listener = new ExcelListener<DtoExcel>();
// headRowNumber(1):表示第一行为表头,从第二行取值
ExcelReader excelReader = EasyExcelFactory.read(inputStream, DtoExcel.class, listener).headRowNumber(1).build();
excelReader.readAll();
List<DtoExcel> listMap = listener.getDatas();
excelReader.finish();
LOGGER.exit(methodName, "业务结束[end]");
return listMap;
}
DTO层
@Getter
@Setter
@ToString
public class DtoExcel implements Serializable{
private static final long serialVersionUID = 2572031321894625232L;
/**
* 姓名
*/
@ExcelProperty(index = 0)
private String name;
/**
* 性别
*/
@ExcelProperty(index = 1)
private String gender;
}
这篇文章也不错,可以参考一下
https://zhuanlan.zhihu.com/p/162077534
//模板下载
@GetMapping("download")
public void download(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("文章下载", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
EasyExcel
.write(response.getOutputStream(), Article.class)
.sheet("文章")
.doWrite(articleDao.list());
}