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. 在 .Net Core1.0 上使用Mysql 的EFcore

    https://www.codeproject.com/Articles/1218348/Using-EF-Core-with-MySQL-in-DotNet-Core

  2. MySQL变量的使用

    在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量. 但根据实际应用又被细化为四种类型,即局部变量.用户变量.会话变量和全局变量. 一.局部变量 mysql局部变量,只能用在begi ...

  3. 记mysql中时间相关的一个奇怪问题

    发现mysql中类型为时间的字段,在查询时显示的时间是什么是依赖于客户端的,不同的客户端查同一个时间,可能在客户端显示的时间是不一样的.至于这个在哪里配置,以及服务端如何依据这个配置为客户端返回结果, ...

  4. 使用sp_addlinkedserver、sp_dropserver 、sp_addlinkedsrvlogin和sp_droplinkedsrvlogin 远程查询数据

    一.sp_addlinkedserver  创建链接服务器. 链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询. 在使用 sp_addlinkedserver 创建链接服务器后,可对该服 ...

  5. git的基本用法

    作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 一:以下是git的基本使用方法: 1:首先先进行账号注册. 2:然 ...

  6. MatLab数字图像处理实战(赵小川)-sift原理

  7. Sublime text 3 For LINUX 注册方法&关闭更新提示

    在 /etc/hosts 文件加入以下 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com 然后再Sublime输入以下注册码 ...

  8. Code Pages

    https://docs.microsoft.com/en-us/windows/desktop/intl/code-pages Most applications written today han ...

  9. [CodeForces 471A] MUH and Sticks

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

  10. innoDB锁小结

    innodb的锁分两类:lock和latch. 其中latch主要是保证并发线程操作临界资源的正确性,要求时间非常短,所以没有死锁检测机制.latch包括mutex(互斥量)和rwlock(读写锁). ...