EasyExcel导入工具(SpringMVC下使用)
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下使用)的更多相关文章
- Mongodb数据导出工具mongoexport和导入工具mongoimport介绍
一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指定导出的数据项,也可以根据指定的条件导 ...
- [转载]一个高效简洁的Aseprite to Unity导入工具
原文链接 https://zhuanlan.zhihu.com/p/28644268 期待原作者上传至AssetStore. 今天,我的第一个 Unity 插件 MetaSprite 正式发布了它的 ...
- POI导入工具类
前言 导入的通用方法,包括xls.xlsx的取值方法,非空判断方法,空行判断,处理了手机号读取和日期读取格式问题.这几个方法就可以完成简单读取了,有时间我在优化下. maven依赖 <!-- P ...
- Mongodb数据导出工具mongoexport和导入工具mongoimport介绍(转)
原文地址:http://chenzhou123520.iteye.com/blog/1641319 一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个colle ...
- ImportTsv-HBase数据导入工具
一.概述 HBase官方提供了基于Mapreduce的批量数据导入工具:Bulk load和ImportTsv.关于Bulk load大家可以看下我另一篇博文. 通常HBase用户会使用HBase A ...
- Mongodb数据导出工具mongoexport和导入工具mongoimport使用
如图所示,两个工具位于mongodb安装目录的bin目录下 下面介绍一下两者的使用方法: 一.导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection ...
- EasyExcel导入导出
maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> & ...
- Redis数据导入工具优化过程总结
Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中: 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻 ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
随机推荐
- python进阶(二) 多进程+协程
我们大多数的时候使用多线程,以及多进程,但是python中由于GIL全局解释器锁的原因,python的多线程并没有真的实现 实际上,python在执行多线程的时候,是通过GIL锁,进行上下文切换线程执 ...
- nuxtjs中使用axios
最近使用nuxtjs服务端渲染框架,在异步请求时遇到两个问题,一是怎么使用axios, 二是怎么在asyncData方法中使用axios 当使用脚手架create nuxt-app创建项目时,会提示是 ...
- C#ImageList和ListView的使用
一.ImageList ImageList组件,又称为图片存储组件,它主要用于存储图片资源,然后在控件上显示出来,这样就简化了对图片的管理.ImageList组件的主要属性是Images,它包含关联 ...
- C++对象赋值问题
- 2014西安赛区C题
将A[i]同他后面比他小的建边,然后求最大密度子图 #include <iostream> #include <algorithm> #include <string.h ...
- 必须添加对程序集"System.Core"的引用
在项目下的web.config中添加 <compilation debug="true" targetFramework="4.0"> <as ...
- Python GIL锁
GIL全局解释器锁:为了解决多线程修改同一块数据. python的线程是调用操作系统的源生线程,启动时就是调用C语言的C源生接口,python调用C语言接口的线程去执行任务时,必须上下文对应关系传给C ...
- centos7 jmeter分布式安装
step1 环境说明:腾讯云主机--> centos7 1主2从 下面使用内网 IP master节点:10.21.11.6 slave1节点:10.21.11.44 slave2节点:10. ...
- MySQL 实战笔记
01 | 基础架构:一条SQL查询语句是如何执行的? 大体可以分为: Server 层:包含了连接器.查询缓存.分析器.优化器.执行器,跨存储引擎的功能都在这一层实现的,比如存储过程.触发器.视图等. ...
- [CodeForces 471A] MUH and Sticks
题目链接:http://codeforces.com/problemset/problem/471/A 题目数据规模1 - 9,可以用一个数组进行计数,减掉出现四次的数,看看还有几个是非零数,有一个就 ...