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. c# 传入c++dll 回调函数输出byte 导致 bug

  2. Go 初体验 - 令人惊叹的语法 - defer.2 - 如何提前执行?

    上一文中讲到 defer 会在宿主函数 return 之前调用,那么我们就是想在宿主函数执行到中间调用,怎么办呢? 1. 改变宿主函数逻辑,分成多个函数,需要的那个函数里 defer . 2. 使用匿 ...

  3. 20165215 MySort的实现

    MySort的实现 要求 模拟实现Linux下Sort -t : -k 2的功能 要有伪代码,产品代码,测试代码(注意测试用例的设计) import java.util.*; public class ...

  4. 记账本微信小程序开发七

    完成所有后续代码 主页代码 教程做的感觉很好,但是自己做出来感觉就low了很多,还是有很多需要改进的地方,这也是我下一步的改进点.

  5. Python+OpenCV图像处理(十五)—— 圆检测

    简介: 1.霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径.极角空间被三维的圆心和半径空间取代.在标准霍夫圆变换中,原图像的边缘图像的任意点对应的经过这个点的所有可能圆在三维空间用圆心 ...

  6. oracle 误删除数据,回退表数据

    select * from sh_gonghuo_renyuan as of timestamp to_timestamp('2017-11-17 16:00:00','yyyy-mm-dd hh24 ...

  7. Python Gevent协程自动切换IO

    Gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程. Gr ...

  8. ldap 集成harbor

    harbor: 1.6 默认配置文件在harbor.cfg,我们可以先不添加配置,直接在harbor web界面进行配置(harbor 1.6 如果db 启动失败提示postgresql 数据目录已存 ...

  9. topcoder srm 560 div1

    problem1 link 从大到小贪心,较大的数字应该放置在较浅的位置. problem2 link 最后的位置要么都是整数(经过偶数次变换),要么是$(p.5, q.5)$这种位置(奇数次变换). ...

  10. Linux PWM framework简介和API描述【转】

    本文转载自:https://blog.csdn.net/mike8825/article/details/51656400 1. 前言 PWM是Pulse Width Modulation(脉冲宽度调 ...