EasyExcel实现导入excel
https://blog.csdn.net/rexueqingchun/article/details/91870372
1.pom.xml配置依赖包
<!-- xls格式excel依赖包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!--xlsx格式excel依赖包--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <!-- easyexcel依赖包 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beat1</version> </dependency>
2.编写excel导入对应实体类
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.metadata.BaseRowModel; public class TestModel extends BaseRowModel { @ExcelProperty(value = "姓名", index = 0) private String xm; @ExcelProperty(value = "微信号", index = 1) private String wxh; @ExcelProperty(value = "手机号", index = 2) private String sjh; public String getXm() { return xm; } public void setXm(String xm) { this.xm = xm; } public String getWxh() { return wxh; } public void setWxh(String wxh) { this.wxh = wxh; } public String getSjh() { return sjh; } public void setSjh(String sjh) { this.sjh = sjh; } }
3.编写导入监听类
import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; public class ExcelListener extends AnalysisEventListener { //自定义用于暂时存储data //private List<Object> datas = Collections.synchronizedList(new ArrayList<>()); private List<Object> datas = new ArrayList<>(); /** * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据 */ @Override public void invoke(Object o, AnalysisContext analysisContext) { datas.add(o); } /** * 读取完之后的操作 */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<Object> getDatas() { return datas; } public void setDatas(List<Object> datas) { this.datas = datas; } }
4.编写导入工具类
import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.springframework.web.multipart.MultipartFile; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.metadata.BaseRowModel; import com.alibaba.excel.metadata.Sheet; public class EasyExcelUtil { /** * 读取某个 sheet 的 Excel * * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @param sheetNo sheet 的序号 从1开始 * @return Excel 数据 list */ public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel) throws IOException { return readExcel(excel, rowModel, 1, 1); } /** * 读取某个 sheet 的 Excel * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @param sheetNo sheet 的序号 从1开始 * @param headLineNum 表头行数,默认为1 * @return Excel 数据 list */ public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo, int headLineNum) throws IOException { ExcelListener excelListener = new ExcelListener(); ExcelReader reader = getReader(excel, excelListener); if (reader == null) { return null; } reader.read(new Sheet(sheetNo, headLineNum, rowModel.getClass())); return excelListener.getDatas(); } /** * 读取指定sheetName的Excel(多个 sheet) * @param excel 文件 * @param rowModel 实体类映射,继承 BaseRowModel 类 * @return Excel 数据 list * @throws IOException */ public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel,String sheetName) throws IOException { ExcelListener excelListener = new ExcelListener(); ExcelReader reader = getReader(excel, excelListener); if (reader == null) { return null; } for (Sheet sheet : reader.getSheets()) { if (rowModel != null) { sheet.setClazz(rowModel.getClass()); } //读取指定名称的sheet if(sheet.getSheetName().contains(sheetName)){ reader.read(sheet); break; } } return excelListener.getDatas(); } /** * 返回 ExcelReader * @param excel 需要解析的 Excel 文件 * @param excelListener new ExcelListener() * @throws IOException */ private static ExcelReader getReader(MultipartFile excel,ExcelListener excelListener) throws IOException { String filename = excel.getOriginalFilename(); if(filename != null && (filename.toLowerCase().endsWith(".xls") || filename.toLowerCase().endsWith(".xlsx"))){ InputStream is = new BufferedInputStream(excel.getInputStream()); return new ExcelReader(is, null, excelListener, false); }else{ return null; } } }
5.业务层调用
//导入excel @RequestMapping(value = "excelImport", method = {RequestMethod.GET, RequestMethod.POST }) public String excelImport(HttpServletRequest request,Model model,@RequestParam("uploadFile") MultipartFile[] files) throws Exception { if(files != null && files.length > 0){ MultipartFile file = files[0]; List<Object> list = EasyExcelUtil.readExcel(file, new TestModel(),1,1); if(list != null && list.size() > 0){ for(Object o : list){ TestModel xfxx = (TestModel) o; System.out.println(xfxx.getXm()+"/"+xfxx.getSjh()+"/"+xfxx.getSjh()); } } } return "index"; }