一、Maven 依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>二、Excel 映射实体
importcom.alibaba.excel.annotation.ExcelProperty;importlombok.Data;@DatapublicclassUserImportDTO{// 第0列:姓名@ExcelProperty(index=0,value="姓名")privateStringuserName;// 第1列:手机号@ExcelProperty(index=1,value="手机号")privateStringphone;// 第2列:邮箱@ExcelProperty(index=2,value="邮箱")privateStringemail;}三、监听器(读取回调)
importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.event.AnalysisEventListener;importjava.util.ArrayList;importjava.util.List;publicclassUserExcelListenerextendsAnalysisEventListener<UserImportDTO>{// 存放读取成功的数据privatefinalList<UserImportDTO>dataList=newArrayList<>();// 每一行有效数据回调,ignoreEmptyRow=true 时空行不会执行该方法@Overridepublicvoidinvoke(UserImportDTOdto,AnalysisContextcontext){dataList.add(dto);}// 文件读取完成后执行@OverridepublicvoiddoAfterAllAnalysed(AnalysisContextcontext){System.out.println("Excel读取完成,有效数据条数:"+dataList.size());}// 获取读取结果publicList<UserImportDTO>getDataList(){returndataList;}}四、核心读取代码
importcom.alibaba.excel.EasyExcel;importjava.io.File;importjava.util.List;publicclassExcelReadDemo{publicstaticvoidmain(String[]args){// Excel本地文件路径FileexcelFile=newFile("D:/userList.xlsx");UserExcelListenerlistener=newUserExcelListener();/** *第一个参数 excelFile 可以换成io流inputStream 这里用的本地文件 *第二个参数 UserImportDTO.calss 模型类 *第三个参数 listener 监听器 */EasyExcel.read(excelFile,UserImportDTO.class,listener).ignoreEmptyRow(true)// 关键配置:读取时自动过滤全部单元格为空的空白行,不会进入 invoke 方法,避免产生全空对象。 true:忽略空行(推荐导入场景)false:读取空行,返回字段全为 null 的实体(默认值).sheet()// 读取第一个工作表.headRowNumber(1)// 表头占1行.doRead();// 获取过滤空行后的有效数据List<UserImportDTO>data=listener.getDataList();for(UserImportDTOitem:data){System.out.println(item);}}}