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-beta5</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.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.ExcelHeadProperty;public class ExcelListener extends AnalysisEventListener {//自定义用于暂时存储dataprivate List<Object> datas = new ArrayList<>();//导入表头private String importHeads = "";//模版表头private String modelHeads = "";/*** 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据*/@Overridepublic void invoke(Object o, AnalysisContext analysisContext) {Integer currentRowNum = analysisContext.getCurrentRowNum();//获取导入表头,默认第一行为表头if(currentRowNum == 0){try {Map<String,Object> m = objToMap(o);for (Object v : m.values()) {importHeads += String.valueOf(v).trim() + ",";}} catch (Exception e) {e.printStackTrace();}}else{datas.add(o);}}/*** 读取完之后的操作*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {//获取模版表头ExcelHeadProperty ehp = analysisContext.getExcelHeadProperty();for(List<String> s : ehp.getHead()){modelHeads += s.get(0) + ",";}}public List<Object> getDatas() {return datas;}public void setDatas(List<Object> datas) {this.datas = datas;}public String getImportHeads() {return importHeads;}public void setImportHeads(String importHeads) {this.importHeads = importHeads;}public String getModelHeads() {return modelHeads;}public void setModelHeads(String modelHeads) {this.modelHeads = modelHeads;}//Object转换为Mappublic  Map<String,Object> objToMap(Object obj) throws Exception{Map<String,Object> map = new LinkedHashMap<String, Object>();Field[] fields = obj.getClass().getDeclaredFields();for(Field field : fields){field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;}
}

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开始* @return Excel 数据 list*/public static Map<String,Object> readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo) throws IOException {Map<String,Object> result = new HashMap<>();ExcelListener excelListener = new ExcelListener();ExcelReader reader = getReader(excel, excelListener);if (reader == null) {return null;}reader.read(new Sheet(sheetNo, 0, rowModel.getClass()));    //校验表头Boolean flag = false;if(excelListener.getImportHeads().equals(excelListener.getModelHeads())){flag = true;}result.put("flag", flag);result.put("datas", excelListener.getDatas());return result;}/*** 读取某个 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());}//读取指定名称的sheetif(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];Map<String,Object> result = EasyExcelUtil.readExcel(file, new TestModel(),1);Boolean flag = (Boolean) result.get("flag");if(flag){List<Object> list = (List<Object>) result.get("datas");    if(list != null && list.size() > 0){for(Object o : list){TestModel xfxx = (TestModel) o;System.out.println(xfxx.getXm()+"/"+xfxx.getSjh()+"/"+xfxx.getSjh());}}}else{System.out.println("表头格式错误");}}  return "index";
}

EasyExcel实现导入excel相关推荐

  1. EasyExcel组件导入Excel文件

    一.问题出现 最近项目中需要实现一个Excel文件导出功能,于是乎,就选择使用了EasyExcel组件来进行Excel文件的导入与导出. 二.代码实现 EasyExcel实现文件的导入,最主要的是需要 ...

  2. EasyExcel的导入excel文件

    前端首先,我是用的avue,当然你们也可以自己选择vue,这里我就用avue演示,vue的我会提示一遍,基本都是比着葫芦画瓢. 我们点击上传时应该有的模态框,这里有两个重要的方法uploadAfter ...

  3. 阿里开源(EasyExcel)---导入EXCEL

    一.简介 二.案例 2.1 POM依赖 <!-- 阿里开源EXCEL --><dependency><groupId>com.alibaba</groupId ...

  4. EasyExcel批量导入excel文档

    1.导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...

  5. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  6. 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出

    目录 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出 一.导入和导出 二.导出数据为excel实现过程 三.将excel中的数据导入到数据库中 基于SpringB ...

  7. springboot easyexcel不创建对象导入excel 通用版

    文章目录 背景知识介绍 有数据对象读方式 创建类实现ReadListener 无额外实现类,since: 3.0.0-beta1 不创建数据对象读方式 实践 思路 抽象监听类 抽象业务处理类 具体业务 ...

  8. 谷粒学院——Day06【整合阿里云OSS、EasyExcel技术实现Excel导入分类】

    阿里云存储OSS 一.对象存储OSS 1. 开通"对象存储OSS"服务 阿里云:https://www.aliyun.com/ 申请阿里云账号 实名认证 开通"对象存储O ...

  9. easyExcel 导入Excel数据

    easyExcel 导入Excel数据 最近公司项目需要导入几十万的Excel数据,我这里用的是现在最流行的easyExcel, 希望能帮助到你 首先导入jar包 <dependency> ...

最新文章

  1. ROS 不能再详细的安装教程
  2. 下划线转驼峰,并且首字母大写
  3. origin做相关性分析图_高分文章的相关性热图,十分钟教你学会无代码复现
  4. python多进程控制gui界面_Python优雅地终止了多进程和gui进程
  5. 火焰传感器工作原理_水流传感器的工作原理和故障分析
  6. Dataset增加行数据及常用方法
  7. oo结尾的单词发音规律
  8. Tecplot 10 将输入的多个plt文件做成动画 :
  9. js函数传参传入对象
  10. 影视之我看——写自己的剧本
  11. vue 配置 微信SDK wifi功能
  12. 去除水晶报表小数点最后多余的0
  13. [原创翻译]RFC1619 PPP over SONET/SDH
  14. 富格林金业:原油天然气怎么掌控买卖点?
  15. Crtl+Enter提交留言
  16. 孤尽T31项目Day3
  17. leetcode-只出现一次的数字 III-42
  18. 多模、AI齐上阵,Deepfake换脸术终赢克星?
  19. 联想sr158安装Linux6.5,联想SR550安装windows2008r2系统
  20. NodeList对象

热门文章

  1. python儿童编程例子代码-认识Python
  2. 服务器配置:阿里云服务器(Windows)的配置以及安装Tomcat连接服务器的教程
  3. php domino,Domino 与 Apache PHP 的集成
  4. 中国安防行业发展趋势四大看点
  5. 绿色数据中心的建设概述
  6. 绿色数据中心应该具备哪些评估标准?
  7. EssentialC++_chapter06 binary tree 的学习笔记记录及问题
  8. C++编程入门之十二(queue容器)
  9. Java SSM 商户 管理系统 客户管理 库存管理 销售报表 项目源码
  10. Share Creators萌芽人才培养计划来了!