easyExcel:由阿里巴巴公司开发,由github托管

github上有详细使用文档

github地址:https://github.com/alibaba/easyexcel/blob/master/quickstart.md

导入

1、模型类:可以是实体类

主要是@ExcelProperty注解

value:对应字段

index:对应导入模板是第几列(从0开始)

@ExcelProperty(value = "name", index = 0)

推荐使用有模型,因为导入模板如果有变化,index可以随时改变

2、Controller接收导入文件

//批量导入(有模型)
@RequestMapping("batchImport")
public ModelAndView batchImport(@RequestParam(value = "file", required=true)MultipartFile file) {
ModelAndView mv=new ModelAndView();
mv.setView(Jackson2Util.jsonView());
InputStream in = null;
try {
in = file.getInputStream();
// 解析每行结果在listener中处理
AnalysisEventListener listener = new ExcelListener(vehicleInfoService);
ExcelReader excelReader = new ExcelReader(in, ExcelTypeEnum.XLSX, null, listener);
//(第几个sheet,表头所在行数,表格对应实体类)
excelReader.read(new Sheet(1, 1, ExcelCardIssueVehicleInfo.class)); mv.addObject("res", "0"); } catch(Exception e) {
logger.error("批量导入失败!", e);
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return mv;
}

3、解析每行数据并入库

public class ExcelListener extends AnalysisEventListener {
private CardIssueVehicleInfoService cardIssueVehicleInfoService; public ExcelListener(CardIssueVehicleInfoService cardIssueVehicleInfoService) {
super();
this.cardIssueVehicleInfoService = cardIssueVehicleInfoService;
} private List<CardIssueVehicleInfo> datas = new ArrayList<CardIssueVehicleInfo>();
//每解析一行数据就走一遍invoke()方法
public void invoke(Object object, AnalysisContext context) {
//转为导入模型类
ExcelCardIssueVehicleInfo excel = (ExcelCardIssueVehicleInfo)object;
CardIssueVehicleInfo vehicleInfo = new CardIssueVehicleInfo();
try {
//导入模型类转为对应数据库的实体类:可以是同一个实体类
BeanUtils.copyProperties(vehicleInfo, excel);
datas.add(vehicleInfo); //数据存储到list,供批量导入处理,或后续自己业务逻辑处理。 } catch (Exception e) {
e.printStackTrace();
}
}
//解析完所有Excel数据后,走此方法
public void doAfterAllAnalysed(AnalysisContext context) {
try{
//入库
cardIssueVehicleInfoService.batchInsert(datas);
} catch(Exception e) {
logger.error("批量导入失败!", e);
}
datas.clear();//解析结束销毁不用的资源
} }

遇到问题及解决方案:

1、模型(实体类)支持String和int类型,不支持Short类型

2、在ExcelListener 类中,Spring注入Service层,会无法注入

解决:在Controller层,将已注入的Service,传入ExcelListener中

 AnalysisEventListener listener = new ExcelListener(vehicleInfoService);

并在ExcelListener的构造器中接收

public ExcelListener(CardIssueVehicleInfoService cardIssueVehicleInfoService) {
super();
this.cardIssueVehicleInfoService = cardIssueVehicleInfoService;
}

3、poi.jar和poi-ooxml.jar的版本一定要一致(easyExcel依赖poi),不然会报错

4、easyExcel基于POI的,遇到的报错,都可以按照POI的错误搜索解决办法

EasyExcel导入工具(SpringMVC下使用)的更多相关文章

  1. Mongodb数据导出工具mongoexport和导入工具mongoimport介绍

    一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指定导出的数据项,也可以根据指定的条件导 ...

  2. [转载]一个高效简洁的Aseprite to Unity导入工具

    原文链接 https://zhuanlan.zhihu.com/p/28644268  期待原作者上传至AssetStore. 今天,我的第一个 Unity 插件 MetaSprite 正式发布了它的 ...

  3. POI导入工具类

    前言 导入的通用方法,包括xls.xlsx的取值方法,非空判断方法,空行判断,处理了手机号读取和日期读取格式问题.这几个方法就可以完成简单读取了,有时间我在优化下. maven依赖 <!-- P ...

  4. Mongodb数据导出工具mongoexport和导入工具mongoimport介绍(转)

    原文地址:http://chenzhou123520.iteye.com/blog/1641319 一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个colle ...

  5. ImportTsv-HBase数据导入工具

    一.概述 HBase官方提供了基于Mapreduce的批量数据导入工具:Bulk load和ImportTsv.关于Bulk load大家可以看下我另一篇博文. 通常HBase用户会使用HBase A ...

  6. Mongodb数据导出工具mongoexport和导入工具mongoimport使用

    如图所示,两个工具位于mongodb安装目录的bin目录下 下面介绍一下两者的使用方法: 一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection ...

  7. EasyExcel导入导出

    maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> & ...

  8. Redis数据导入工具优化过程总结

    Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中: 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻 ...

  9. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

随机推荐

  1. python进阶(二) 多进程+协程

    我们大多数的时候使用多线程,以及多进程,但是python中由于GIL全局解释器锁的原因,python的多线程并没有真的实现 实际上,python在执行多线程的时候,是通过GIL锁,进行上下文切换线程执 ...

  2. nuxtjs中使用axios

    最近使用nuxtjs服务端渲染框架,在异步请求时遇到两个问题,一是怎么使用axios, 二是怎么在asyncData方法中使用axios 当使用脚手架create nuxt-app创建项目时,会提示是 ...

  3. C#ImageList和ListView的使用

    一.ImageList  ImageList组件,又称为图片存储组件,它主要用于存储图片资源,然后在控件上显示出来,这样就简化了对图片的管理.ImageList组件的主要属性是Images,它包含关联 ...

  4. C++对象赋值问题

  5. 2014西安赛区C题

    将A[i]同他后面比他小的建边,然后求最大密度子图 #include <iostream> #include <algorithm> #include <string.h ...

  6. 必须添加对程序集"System.Core"的引用

    在项目下的web.config中添加 <compilation debug="true" targetFramework="4.0"> <as ...

  7. Python GIL锁

    GIL全局解释器锁:为了解决多线程修改同一块数据. python的线程是调用操作系统的源生线程,启动时就是调用C语言的C源生接口,python调用C语言接口的线程去执行任务时,必须上下文对应关系传给C ...

  8. centos7 jmeter分布式安装

    step1 环境说明:腾讯云主机--> centos7  1主2从 下面使用内网 IP master节点:10.21.11.6 slave1节点:10.21.11.44 slave2节点:10. ...

  9. MySQL 实战笔记

    01 | 基础架构:一条SQL查询语句是如何执行的? 大体可以分为: Server 层:包含了连接器.查询缓存.分析器.优化器.执行器,跨存储引擎的功能都在这一层实现的,比如存储过程.触发器.视图等. ...

  10. [CodeForces 471A] MUH and Sticks

    题目链接:http://codeforces.com/problemset/problem/471/A 题目数据规模1 - 9,可以用一个数组进行计数,减掉出现四次的数,看看还有几个是非零数,有一个就 ...