EasyExcel

EasyExcel 由五部分组成,分别是配置读取类(EasyExcelHalper)、导出Excel类(EasyExcelExportUtil)、导入Excel类(EasyExcelImportUtil)、导入Excel返回结果类(EasyExcelImportResult)和xml配置文件。

应用环境:

  1. 单线程、不牵扯到并发操作。同一时间只有一人做导入操作,或只有管理员有导入权限。(受限于程序中的唯一性校验)

  2. 导入数据,列不超过26(受限于英文26个字母,不合法数据的定位),数量不大(受限于程序中数据校验,不合法数据的定位,所谓越详细就越复杂),支持常用的数据类型。

优点:

  1. 可以控制任意字段的类型、是否可以为空及某个字段的唯一性,避免重复导入。

  2. 精确返回某一条不合法数据的某个字段的位置,方便用户根据提示修改Excel数据。例如:B3

  3. 有严格的数据校验,避免导入的数据不能转成目标类型(数据库字段类型)。

  4. 可以冻结标题行。

缺点:

  1. 既要不合法数据精确定位,又要数据校验,导致控制程序逻辑较多,以性能换取数据质量。

  2. 避免重复导入功能要求不能并发操作。

  3. 数据量不能超过一个sheet页,且数据尽量少。

  4. 需要准确在xml里配置标签、字段、字段数据类型、是否可以为空、是否唯一。

快速入门:

  1. 添加Maven依赖
<dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version>
</dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>
  1. xml配置

默认文件名【easyExcel-config.xml】,当然如果你觉得不爽,可以在EasyExcelHalper类中修改。
默认文件放到src/main/resources根目录下。
无需spring加载该配置文件,EasyExcelHalper类自动去默认位置加载easyExcel-config.xml。
可以配置多个sheet页,在程序中传参选择使用哪个数据模板。

xml的基本结构

<excel><sheets><sheet><title>图书</title><freeze>true</freeze><columns><column><name>书名</name><type>java.lang.String</type><notNull>true</notNull><unique>true</unique></column><!-- column... --></columns></sheet><!-- sheet... --></sheets>
</excel>

其中,excel、sheets、sheet、title、columns、column、name、type节点是必有的。
3.jsp

<body><a href="book/exportExcel">导出Excel</a><form action="book/importExcel" method="post" enctype="multipart/form-data"><input type="file" value="导入Excel" name="bookExcel"><input type="submit"  value="导入Excel" > </form>
</body>

4.Controller


import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import com.sep6th.service.BookSrvImpl;
import com.sep6th.util.EasyExcelImportResult;/** * The Apache License 2.0* Copyright (c) 2018 sep6th*/@Controller
@RequestMapping("/book")
public class BookController {@Autowiredprivate BookSrvImpl bookSrv;/*** 导出*/@RequestMapping("/exportExcel")public void exportExcel(HttpServletResponse response) throws Exception {String fileName = "书籍清单";bookSrv.exportExcel(response,fileName);}/*** 导入* 返回的json格式:* {"dataCount":3,"errDataCount":0,"importDataCount":3,"xyOfNullList":[],"xyOfTypeNoMatchList":[],"xyOfRepList":[]}*/@RequestMapping("/importExcel")@ResponseBodypublic EasyExcelImportResult importExcel(Model model, MultipartFile bookExcel){return bookSrv.importExcel(bookExcel);}}
  1. Service
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import com.sep6th.util.EasyExcelExportUtil;
import com.sep6th.util.EasyExcelImportResult;
import com.sep6th.util.EasyExcelImportUtil;/** * The Apache License 2.0* Copyright (c) 2018 sep6th*/@Service
public class BookSrvImpl {/*** 导出模板或数据*/public void exportExcel(HttpServletResponse response, String fileName) {Map<Integer,List<Object[]>> map = new HashMap<Integer,List<Object[]>>();map.put(0, null);try {EasyExcelExportUtil.export(fileName, map, response);} catch (Exception e) {e.printStackTrace();}}/*** 导入数据* @param bookExcel */public EasyExcelImportResult importExcel(MultipartFile bookExcel) {List<List<Object>> dataList = new ArrayList<List<Object>>();// 模拟数据库查出的唯一标识列Set<String> uniqueIdSet = new HashSet<String>();uniqueIdSet.add("11");uniqueIdSet.add("22");uniqueIdSet.add("33");EasyExcelImportResult result= EasyExcelImportUtil.readExcel(bookExcel, 0, dataList, uniqueIdSet);if(result.getErrDataCount()==0){System.out.println("模拟取数据,向数据库添加数据中...");for (List<Object> list: dataList){for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+"  ");}System.out.println();}result.setImportDataCount((long) dataList.size());}return result;}}

【笔记】Spring整合EasyExcel相关推荐

  1. Redis工作笔记-spring整合jedis

    目录 概念 代码与实例 概念 这里,一般都是用jedis去搞项目,而不是用spring自带的. 主要是xml: <?xml version="1.0" encoding=&q ...

  2. 文件用户Apache shiro学习笔记+ spring整合shiro (一)

    改章节朋友在青岛游玩的时候突然想到的...这两天就有想写几篇关于文件用户的博客,所以回家到之后就奋笔疾书的写出来发表了 Apache Shiro官网:http://shiro.apache.org/ ...

  3. spring学习笔记06-spring整合junit(出现的问题,解决的思路)

    spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...

  4. Spring Boot整合EasyExcel(完整版包含上传解析excel和下载模板)

    Spring Boot整合EasyExcel(完整版包含上传解析excel和下载模板) 1. 加入依赖 2. 对读取excel内容(批量添加) 3. 模板下载: 1. 加入依赖 <depende ...

  5. Struts2学习笔记——Struts2与Spring整合

    Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的be ...

  6. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  7. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  8. Activiti学习笔记:Activiti和Spring整合、Activiti和SpringBoot整合之Gradle版

    环境 activiti:7+ Java:11 本机环境:window MySQL:5.7 gradlew:6+ Activiti和Spring整合 大体流程: 先创建项目,并导入依赖 添加activi ...

  9. 【Java从0到架构师】Spring - 整合 MyBatis

    整合 MyBatis 整合 MyBatis - 依赖 整合 MyBatis - 数据源 整合 MyBatis - SqlSessionFactoryBean 整合 MyBatis - MapperSc ...

最新文章

  1. linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制
  2. 20165101刘天野 2018-2019-2《网络对抗技术》第1周 Kali的安装
  3. python开发桌面软件-python适合windows的桌面应用程序开发吗?
  4. KlayGE中的FXAA已经完成
  5. 2-1 什么是人工智能|人工智能框架TensorFlow应用实践
  6. vant组件搜索并选择_借助PARTsolutions 选型助手,轻松快速地找到组件。
  7. 面试进阶之字符串常量池
  8. Linux与C++11多线程编程(学习笔记)
  9. linux wheel用户组,Linux的用户和组之详解用户和组的分类
  10. 正确评估SQL数据库性能,你必须知道的原理和方法!
  11. 二叉树的实现(Java语言描述)
  12. EXPLAIN查看SQL执行计划
  13. 0x800700b7 linux,0x800700b7解决方法
  14. 一个疫情期间的实习生经历
  15. 抖音开屏广告和信息流广告相比较哪一种效果更好?
  16. DOS简介及常用命令
  17. forward和redirect的区别是什么?
  18. 逃避追债?贾跃亭把法拉第未来股权转给了外甥,但他还有5套豪宅! | 焦点
  19. 软件行业的QA与QC的区别
  20. Wxpython pannel切换

热门文章

  1. 解决URL传参中文乱码
  2. Javascript 设计模式 js设计模式 应用级讲解
  3. PERT II型管简介
  4. Java如何获取客户端主机真实IP地址
  5. 一键解决adb 5037端口被占用
  6. 青少年信息学(计算机)奥林匹克,全国青少年信息学(计算机)奥林匹克竞赛及分区联赛说明...
  7. Hbuilder android 在线更新功能 后端获取最新版本号和增量更新wgt包 (稀缺资源) 2018全网仅有
  8. JAVA毕设项目小王防疫副食品配送商城(java+VUE+Mybatis+Maven+Mysql)
  9. AIoT这一年:从五家公司窥AIoT五大领域发展 | AIoT势力榜
  10. 大数系列——大数加法