前言

最近还得写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导入并解析插入数据库的更多相关文章

  1. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...

  2. 【原创】POI操作Excel导入导出工具类ExcelUtil

    关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...

  3. POI之Excel导入

    1,maven配置 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oox ...

  4. Java之POI的excel导入导出

    一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...

  5. POI操作Excel导入和导出

    Apache的POI组件是Java操作Microsoft Office办公套件的强大API,当中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel.由于Word和Po ...

  6. Spring Boot学习笔记----POI(Excel导入导出)

    业务:动态生成模板导出Excel,用户修改完再导入Excel. Spring boot + bootstrap + poi 1.添加Dependence <dependency> < ...

  7. ASP.NET Excel导入到SQL Server数据库

    本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html 提供把Excel里的数据导入到SQL Server 数据库,前提是 ...

  8. 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次

    数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...

  9. 基于POI的Excel导入导出(JAVA实现)

    今天做了个excel的导入导出功能,在这记录下. 首先现在相关poi的相关jar包,资源链接:http://download.csdn.net/detail/opening_world/9663247 ...

随机推荐

  1. java的时间获取

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. currentTimeMillis方法 public static long currentTim ...

  2. Helper Files

    常用帮助类 C#语法糖 Net 通用工具类 Helloweba Front Program Resources jqGrid   Highcharts  jQuery实现的加载页面过渡效果   jQu ...

  3. linux定时任务php

    1. 在需要定时执行的PHP文件的第一行加 #! /usr/local/php/bin/php          服务器php.exe的位置 2. 上传要定时执行的php文件到一个位置,可以通过/pa ...

  4. 数据库原理及应用-用户接口及SQL查询语言(Query Language)

    2018-02-07 20:41:39 一.DBMS的用户接口 查询语言 访问DBMS的访问工具(GUI) API 相关类库 二.SQL语言 SQL语言可以细分为四种: 1.Data Definiti ...

  5. Android系统源代码

    Android系统源代码 在线源码网站 1,http://androidxref.com 2,http://www.grepcode.com/ 3,http://www.androidos.net.c ...

  6. android之代码混淆

    项目发布之前混淆是必不可少的工作,混淆可以增加别人反编译阅读代码的难度,还可以缩小APK包. Android 中通过ProGuard 来混淆Java代码,仅仅是混淆java代码.它是无法混淆Nativ ...

  7. flask学习(四):debug模式

    一. 设置debug模式 1. flask 1.0之前 在app.run()中传入一个关键字参数debug,app.run(debug=True),就设置当前项目为debug模式 2. flask 1 ...

  8. Windows、Ubuntu双系统正确卸载Ubuntu系统

    先判断启动方式,以管理员身份打开cmd或者power shell,输入bcdedit,找到path那一行,如果是winload.efi就是uefi引导,若为exe就是legacy引导 或者win+r输 ...

  9. H3C WA2610i-GN FitAP telnet打开

    在ac上面:sys_hidecmd 隐藏模式wlan ap ap1 exec-control enable ##目前为disable状态wlan ap ap1 telnet enable ##目前为e ...

  10. 【error】: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

    错误描述如下: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) ...