https://blog.csdn.net/rexueqingchun/article/details/91870372

1.pom.xml配置依赖包

  1. <!-- xls格式excel依赖包 -->
  2. <dependency>
  3. <groupId>org.apache.poi</groupId>
  4. <artifactId>poi</artifactId>
  5. <version>3.17</version>
  6. </dependency>
  7. <!--xlsx格式excel依赖包-->
  8. <dependency>
  9. <groupId>org.apache.poi</groupId>
  10. <artifactId>poi-ooxml</artifactId>
  11. <version>3.17</version>
  12. </dependency>
  13. <!-- easyexcel依赖包 -->
  14. <dependency>
  15. <groupId>com.alibaba</groupId>
  16. <artifactId>easyexcel</artifactId>
  17. <version>1.1.2-beat1</version>
  18. </dependency>

2.编写excel导入对应实体类

  1. import com.alibaba.excel.annotation.ExcelProperty;
  2. import com.alibaba.excel.metadata.BaseRowModel;
  3.  
  4. public class TestModel extends BaseRowModel {
  5.  
  6. @ExcelProperty(value = "姓名", index = 0)
  7. private String xm;
  8. @ExcelProperty(value = "微信号", index = 1)
  9. private String wxh;
  10. @ExcelProperty(value = "手机号", index = 2)
  11. private String sjh;
  12.  
  13. public String getXm() {
  14. return xm;
  15. }
  16. public void setXm(String xm) {
  17. this.xm = xm;
  18. }
  19. public String getWxh() {
  20. return wxh;
  21. }
  22. public void setWxh(String wxh) {
  23. this.wxh = wxh;
  24. }
  25. public String getSjh() {
  26. return sjh;
  27. }
  28. public void setSjh(String sjh) {
  29. this.sjh = sjh;
  30. }
  31.  
  32. }

3.编写导入监听类

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;
  4.  
  5. import com.alibaba.excel.context.AnalysisContext;
  6. import com.alibaba.excel.event.AnalysisEventListener;
  7.  
  8. public class ExcelListener extends AnalysisEventListener {
  9.  
  10. //自定义用于暂时存储data
  11. //private List<Object> datas = Collections.synchronizedList(new ArrayList<>());
  12. private List<Object> datas = new ArrayList<>();
  13.  
  14. /**
  15. * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据
  16. */
  17. @Override
  18. public void invoke(Object o, AnalysisContext analysisContext) {
  19. datas.add(o);
  20. }
  21.  
  22. /**
  23. * 读取完之后的操作
  24. */
  25. @Override
  26. public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  27.  
  28. }
  29.  
  30. public List<Object> getDatas() {
  31. return datas;
  32. }
  33.  
  34. public void setDatas(List<Object> datas) {
  35. this.datas = datas;
  36. }
  37. }

4.编写导入工具类

  1. import java.io.BufferedInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.List;
  5.  
  6. import org.springframework.web.multipart.MultipartFile;
  7.  
  8. import com.alibaba.excel.ExcelReader;
  9. import com.alibaba.excel.metadata.BaseRowModel;
  10. import com.alibaba.excel.metadata.Sheet;
  11.  
  12. public class EasyExcelUtil {
  13.  
  14. /**
  15. * 读取某个 sheet 的 Excel
  16. *
  17. * @param excel 文件
  18. * @param rowModel 实体类映射,继承 BaseRowModel 类
  19. * @param sheetNo sheet 的序号 从1开始
  20. * @return Excel 数据 list
  21. */
  22. public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel) throws IOException {
  23. return readExcel(excel, rowModel, 1, 1);
  24. }
  25.  
  26. /**
  27. * 读取某个 sheet 的 Excel
  28. * @param excel 文件
  29. * @param rowModel 实体类映射,继承 BaseRowModel 类
  30. * @param sheetNo sheet 的序号 从1开始
  31. * @param headLineNum 表头行数,默认为1
  32. * @return Excel 数据 list
  33. */
  34. public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo, int headLineNum) throws IOException {
  35. ExcelListener excelListener = new ExcelListener();
  36. ExcelReader reader = getReader(excel, excelListener);
  37. if (reader == null) {
  38. return null;
  39. }
  40. reader.read(new Sheet(sheetNo, headLineNum, rowModel.getClass()));
  41. return excelListener.getDatas();
  42. }
  43.  
  44. /**
  45. * 读取指定sheetName的Excel(多个 sheet)
  46. * @param excel 文件
  47. * @param rowModel 实体类映射,继承 BaseRowModel 类
  48. * @return Excel 数据 list
  49. * @throws IOException
  50. */
  51. public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel,String sheetName) throws IOException {
  52. ExcelListener excelListener = new ExcelListener();
  53. ExcelReader reader = getReader(excel, excelListener);
  54. if (reader == null) {
  55. return null;
  56. }
  57. for (Sheet sheet : reader.getSheets()) {
  58. if (rowModel != null) {
  59. sheet.setClazz(rowModel.getClass());
  60. }
  61. //读取指定名称的sheet
  62. if(sheet.getSheetName().contains(sheetName)){
  63. reader.read(sheet);
  64. break;
  65. }
  66. }
  67. return excelListener.getDatas();
  68. }
  69.  
  70. /**
  71. * 返回 ExcelReader
  72. * @param excel 需要解析的 Excel 文件
  73. * @param excelListener new ExcelListener()
  74. * @throws IOException
  75. */
  76. private static ExcelReader getReader(MultipartFile excel,ExcelListener excelListener) throws IOException {
  77. String filename = excel.getOriginalFilename();
  78. if(filename != null && (filename.toLowerCase().endsWith(".xls") || filename.toLowerCase().endsWith(".xlsx"))){
  79. InputStream is = new BufferedInputStream(excel.getInputStream());
  80. return new ExcelReader(is, null, excelListener, false);
  81. }else{
  82. return null;
  83. }
  84. }
  85.  
  86. }

5.业务层调用

  1. //导入excel
  2. @RequestMapping(value = "excelImport", method = {RequestMethod.GET, RequestMethod.POST })
  3. public String excelImport(HttpServletRequest request,Model model,@RequestParam("uploadFile") MultipartFile[] files) throws Exception {
  4. if(files != null && files.length > 0){
  5. MultipartFile file = files[0];
  6. List<Object> list = EasyExcelUtil.readExcel(file, new TestModel(),1,1);
  7. if(list != null && list.size() > 0){
  8. for(Object o : list){
  9. TestModel xfxx = (TestModel) o;
  10. System.out.println(xfxx.getXm()+"/"+xfxx.getSjh()+"/"+xfxx.getSjh());
  11. }
  12. }
  13. }
  14. return "index";
  15. }

EasyExcel实现导入excel的更多相关文章

  1. springboot批量导入excel数据

    1 背景 小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据吧,当时我的内心是拒绝的,然后默默打开idea. 2 介绍 2.1 框架 java本身 ...

  2. 使用Layui、Axios、Springboot(Java) 实现EasyExcel的导入导出(浏览器下载)

    实现EasyExcel的导入导出(浏览器下载) 实现三个按钮的功能,但是却花费了一天的时间包括总结. 使用到的技术:springboot layui axios EasyExcel mybatis-p ...

  3. 使用VUE+SpringBoot+EasyExcel 整合导入导出数据

    使用VUE+SpringBoot+EasyExcel 整合导入导出数据 创建一个普通的maven项目即可 项目目录结构 1 前端 存放在resources/static 下 index.html &l ...

  4. 一步步实现ABAP后台导入EXCEL到数据库【3】

    在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...

  5. 一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  6. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  7. IE8下导入EXCEL数据传到客户端以附件下载

    IE8下导入EXCEL数据传到客户端以附件下载方式出现,而不显示数据,解决方法:以text/html格式返回. HttpResponseMessage message = new HttpRespon ...

  8. java的poi技术读取和导入Excel

    项目结构: http://www.cnblogs.com/hongten/gallery/image/111987.html  用到的Excel文件: http://www.cnblogs.com/h ...

  9. 报表工具如何实现多次导入Excel

    很多人在开发报表的时候会遇到将多张表样相同的excel导入到模板,然后提交至数据库中.但问题是很多情况,在线导入不支持一次性选择多个excel,一次只能选择一个excel,也不能将多个excel中的数 ...

随机推荐

  1. IDAE快捷键与设置

    以前做项目的时候都是用Eclispe,来到新的公司发现IDE用的是IDEA集成开发工具,以前也用过IDEA,只是略懂略懂,以后你会发现,当你用IDEA的快捷键的时候,会6的飞起 1.IDEA常用快捷键 ...

  2. Node.js文档-模块

    核心模块 Node为Javascript提供了很多服务器级别的API,绝大多数都被包装到了一个具名的核心模块中,例如文件操作的fs核心模块,http服务构建的http模块等,核心模块的使用必须通过re ...

  3. Java操作RocketMQ

    第一步:导入依赖 <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>ro ...

  4. PostgreSQL内核学习笔记四(SQL引擎)

    PostgreSQL实现了SQL Standard2011的大部分内容,SQL处理是数据库中非常复杂的一部分内容. 本文简要介绍了SQL处理的相关内容. 简要介绍 SQL文的处理分为以下几个部分: P ...

  5. matlab 中 find() 函数用法

    一. 功能: 寻找非零元素的索引和值 二.相关函数语法: ind = find(X) ind = find(X, k) ind = find(X, k, 'first') ind = find(X, ...

  6. ECharts展示后台数据

    /** * Created by Administrator on 2015/11/10 010. */ var home = function () { //项目预警分析 var getProAla ...

  7. MySQL第六课

    SELECT [DISTINCT]     * /{字段名1,字段名2,字段名3,.........} FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名[HAVING 条件表达 ...

  8. (办公)记事本_linux压缩命令

    参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show 在Linux中可以识别的常见的压缩格式有十几种,比如&quo ...

  9. Linux配置安装

    1.  安装jdk 1.1   卸载:使用java version查看虚拟机是否有jdk环境,存在先卸载: 1.      首先我的系统是CenOS7,安装完成后,先打开终端,切换到管理员账号,命令如 ...

  10. 如何在Mac上显示和查看隐藏的文件/文件夹

    今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...