一、导入pom依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.5</version>
</dependency>
二、创建监听器
package com.chcontrol.sysutil.excelutil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 解析监听器,
* 每解析一行会回调invoke()方法。
* 整个excel解析结束会执行doAfterAllAnalysed()方法
*
* @author Mr_Fei
* @date 2019/11/19
*/
@Slf4j
@Getter
@Setter
public class ExcelListener extends AnalysisEventListener<Map<Integer, String>> {
/**
* 自定义存储表格数据
*/
private List<Map<Integer, String>> dataList = new ArrayList<>();
/**
* 自定义存储标题结果
*/
private Map<Integer, String> titleMap = new HashMap<>();
@Override
public void invoke(Map<Integer, String> result, AnalysisContext context) {
//获取当前行号
Integer rowIndex = context.readRowHolder().getRowIndex();
if (rowIndex == 0) {
this.titleMap = result;
} else {
//数据存储到list,供批量处理,或后续自己业务逻辑处理。
dataList.add(result);
}
log.info("解析数据第{}行,数据为:{}", rowIndex, result);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// list.clear();//解析结束销毁不用的资源
log.info("解析完成!");
}
}
三、使用示例
// 使用 示例
public static void main(String[] args) {
File file = new File("F:\\123.xlsx");
//创建监听器
ExcelListener excelListener = new ExcelListener();
//这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
//如果是MultipartFile文件,file处使用multipartFile.getInputStream()
//headRowNumber(0):表示从第0行开始读取。读取标题设置
EasyExcelFactory.read(file, excelListener).sheet().headRowNumber(0).doRead();
//获取数据内容
List<Object> dataList = excelListener.getDataList();
//获取标题内容
List<Object> titleList = excelListener.getTitleList();
}
注:在导入表格内容不多的情况下,使用该方法简单粗暴。但如果导入量大的情况下,可以在监听器中进行写库操作。