<!-- 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(); }
注:在导入表格内容很少的状况下,使用该方法简单粗暴。但若是导入量大的状况下,能够在监听器中进行写库操做。java