使用poi进行excel导入并解析插入数据库
前言
最近还得写excel的导入导出,结果还是得百度,虽然都能看懂,但是还是想记录下来这些东西
正文
1. 导入jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2. 开始导入
@RequestMapping(value = "importUsers",method = RequestMethod.POST)
public Map<String,Object> importUsers(MultipartFile userFile){
Map<String,Object> resultMap = new HashMap<>();
if(userFile == null || userFile.isEmpty()){
resultMap.put("success", false);
resultMap.put("msg", "数据文件不存在");
return resultMap;
}
//开启新的线程来处理导入,并使用callback接受结果
FutureTask<Map<String,Object>> task = new FutureTask<>(
()->userService.importUsers(userFile)
);
new Thread(task).start();
try {
resultMap = task.get();
} catch (Exception e) {
e.printStackTrace();
}
return resultMap;
}
3. 业务层
@Override
public Map<String, Object> importUsers(MultipartFile userFile) {
Map<String,Object> resultMap = new HashMap<>();
try {
//获取文件的输入流
InputStream inputStream = userFile.getInputStream();
//根据不同类型excel创建book页。
String fileName = userFile.getOriginalFilename();
Workbook book = null;
if(fileName.endsWith(XLSX)){
book = new XSSFWorkbook(inputStream);
}else if(fileName.endsWith(XLS)){
book = new HSSFWorkbook(inputStream);
}else{
resultMap.put("success", false);
resultMap.put("msg", "文件格式有误!");
return resultMap;
}
if(book != null){
//第一个工作簿
Sheet sheet = book.getSheetAt(0);
//将结果转换成集合
List<User> users = convert(sheet);
for (User u : users) {
userMapper.insert(u);
}
System.out.println(users);
}
resultMap.put("success", true);
resultMap.put("msg", "上传成功!");
return resultMap;
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
/**
* 将每行数据封装成一个对象
*/
private List<User> convert(Sheet sheet){
List<User> userList = new ArrayList<>();
for (int i = 2; i <= sheet.getLastRowNum() ; i++) {
//第一行,第二行跳过,是记录名和字段名,从第三行开始
Row row = sheet.getRow(i);
User user = new User();
Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()){
Cell cell = iterator.next();
if(cell.getColumnIndex() == 1){
//第二列,类型设置为string,然后赋值给name
cell.setCellType(CellType.STRING);
user.setPhone(cell.getStringCellValue());
}
if(cell.getColumnIndex() == 3){
//第三列,时间格式
if(DateUtil.isCellDateFormatted(cell)){
Date date = cell.getDateCellValue();
user.setCreateDate(date);
}
}
if(cell.getColumnIndex() == 2){
//第二列,类型设置为string,然后赋值给name
cell.setCellType(CellType.STRING);
user.setPassword(cell.getStringCellValue());
}
}
userList.add(user);
}
return userList;
}
到现在为止,已经实现了excel的导入了!
需要注意的是:这里必须根据模板来进行数据的取出并分别赋值给不同的属性。
使用poi进行excel导入并解析插入数据库的更多相关文章
- SpringBoot集成文件 - 集成POI之Excel导入导出
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- POI之Excel导入
1,maven配置 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oox ...
- Java之POI的excel导入导出
一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...
- POI操作Excel导入和导出
Apache的POI组件是Java操作Microsoft Office办公套件的强大API,当中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel.由于Word和Po ...
- Spring Boot学习笔记----POI(Excel导入导出)
业务:动态生成模板导出Excel,用户修改完再导入Excel. Spring boot + bootstrap + poi 1.添加Dependence <dependency> < ...
- ASP.NET Excel导入到SQL Server数据库
本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html 提供把Excel里的数据导入到SQL Server 数据库,前提是 ...
- 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次
数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...
- 基于POI的Excel导入导出(JAVA实现)
今天做了个excel的导入导出功能,在这记录下. 首先现在相关poi的相关jar包,资源链接:http://download.csdn.net/detail/opening_world/9663247 ...
随机推荐
- Module 的加载实现
浏览器加载 传统方法 HTML 网页中,浏览器通过<script>标签加载 JavaScript 脚本. <!-- 页面内嵌的脚本 --> <script type=&q ...
- Spring MVC:控制器类名称处理映射
控制器类名称处理映射的好好处是: 如果项目是hello,WelcomeController是控制器,那么访问地址是: http://localhost:8080/hello/welcome http: ...
- server2012/win8 卸载.net framework 4.5后 无法进入系统桌面故障解决
故障:服务器装的是windows2012 standard(2012版本从低到高依次为Foundation.Essentials.StandardDatacenter,以及它们的升级版R2),由于要安 ...
- 1-23-shell脚本之-if流程控制语句和for循环语句的使用
大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句 ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号 ...
- UVA-10537 The Toll! Revisited (dijkstra)
题目大意:每经过一个地方就要交出相应的货物作为过路费,问将一批货物从起点运到终点,最少需要携带多少货物? 题目分析:在每一站交的过路费由当前拥有的货物量来决定,所以,要以终点为源点,求一次单源最短路即 ...
- CodeForces 297D Color the Carpet (脑补题)
题意 一个h*w的矩阵上面涂k种颜色,并且每行相邻格子.每列相邻格子都有=或者!=的约束.要求构造一种涂色方案使得至少有3/4的条件满足. 思路 脑补神题--自己肯定想不出来T_T-- 官方题解: 2 ...
- syslinux启动盘制作
# <font color=DarkCyan >syslinux启动盘制作</font> # ### 准备工具 ### 1. BOOTICEx64 软件 ##分区引导制作工具 ...
- 基本http服务性能测试(Python vs Golang)
最近学习Golang,总想体验下并发到底有多叼,必我大 python强势多少. 学习了官方教程的http 服务,用性能测试工具wrk测试了下,发现结果很令人惊讶- wrk可以参考我的博客,有基本用法说 ...
- Last_SQL_Errno: 1062
Last_SQL_Errno: 1062: Last_Error: Error 'Duplicate entry '212' for key 'PRIMARY'' on query. Default ...
- cx_freeze打包EXE文件
创建setup.py文件 import osimport sysfrom cx_Freeze import setup, Executable build_exe_options = dict(pac ...