EasyExcel实现导入excel
Posted bbllw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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";
以上是关于EasyExcel实现导入excel的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - 集成 EasyExcel 实现数据导入导出功能