1 背景

小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据吧,当时我的内心是拒绝的,然后默默打开idea。

2 介绍

2.1 框架

java本身并不支持读取excel,所有读取excel需要借助一些框架。目前有几种方式,

1. Apache POI

2. Java Excel API

3. easyexcel

这里主要讲解的是 Apache POI,Apache POI支持03版以及07年版 区别是后缀不一样,03版对应的是xls 07版对应的是xlsx xlsx

这里主要讲解的是07版的

2.2 excel字段介绍

1.sheet表示的是

excel底部的工作表.

对应的是POI的的XSSFSheet

2.row表示的是行

对应的是POI的的XSSFRow

3.cell表示的是每一行的单元格.

对应的是POI的的Cell

3 源码

3.0 片段说明

1.上传文件使用springboot的MultipartFile

对应

  1. MultipartFile file

2.创建对象

  1. XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);

3.获取sheet(默认第一个)

  1. XSSFSheet sheet = xssfWorkbook.getSheetAt(0);

3.1 控制层源码

  1. @RequestMapping("/import")
  2. public void importExcel(@RequestParam("file") MultipartFile file) throws Exception{
  3. InputStream inputStream = file.getInputStream();
  4. //07年的 不兼容之前
  5. XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
  6. XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
  7. //获取行数
  8. int lastRowNum = sheet.getLastRowNum();
  9. for (int i = 1; i <= lastRowNum; i++) {
  10. XSSFRow row = sheet.getRow(i);
  11. QuChannel quChannel = new QuChannel();
  12. if (row.getCell(0) != null){
  13. row.getCell(0).setCellType(XSSFCell.CELL_TYPE_STRING);
  14. quChannel.setChannel(row.getCell(0).getStringCellValue());
  15. }
  16. if (row.getCell(1) != null){
  17. row.getCell(1).setCellType(XSSFCell.CELL_TYPE_STRING);
  18. quChannel.setChannelName(row.getCell(1).getStringCellValue());
  19. }
  20. if (row.getCell(2) != null){
  21. row.getCell(2).setCellType(XSSFCell.CELL_TYPE_STRING);
  22. quChannel.setRemarks(row.getCell(2).getStringCellValue());
  23. }
  24. if (row.getCell(3) != null){
  25. quChannel.setChannelSource((int) row.getCell(3).getNumericCellValue());
  26. }
  27. if (row.getCell(4) != null){
  28. quChannel.setActivityType((int) row.getCell(4).getNumericCellValue());
  29. }
  30. if (row.getCell(5) != null){
  31. quChannel.setDeliveryTime(row.getCell(5).getDateCellValue());
  32. }
  33. if (row.getCell(6) != null){
  34. row.getCell(6).setCellType(XSSFCell.CELL_TYPE_STRING);
  35. quChannel.setOriginalLink(row.getCell(6).getStringCellValue());
  36. }
  37. if (row.getCell(7) != null){
  38. row.getCell(7).setCellType(XSSFCell.CELL_TYPE_STRING);
  39. quChannel.setSaLink(row.getCell(7).getStringCellValue());
  40. }
  41. if (row.getCell(8) != null){
  42. quChannel.setDeliveryMode((int) row.getCell(8).getNumericCellValue());
  43. }
  44. if (row.getCell(9) != null){
  45. quChannel.setCreateGroup((int) row.getCell(9).getNumericCellValue());
  46. }
  47. if (row.getCell(10) != null){
  48. row.getCell(10).setCellType(XSSFCell.CELL_TYPE_STRING);
  49. quChannel.setRemark(row.getCell(10).getStringCellValue());
  50. }
  51. quChannelMapper.insert(quChannel);
  52. }
  53. }

3.2 review

1.避免将sql写在for循环里面,改进的话可以创建一个列表list,将对象add进去,然后在循环外面进行批量插入

2.想要去重的话可以使用set的不能重复添加特性

3.注意excel的字段与类属性的对应关系,如果excel字段是string,但是累属性是整形的话,可以使用枚举类

暂时想到这么多 欢迎指教评论

springboot批量导入excel数据的更多相关文章

  1. MySQL批量导入Excel数据

    MySQL批量导入Excel数据 1.确定需要导入数据的表名称以及字段,然后在新建的Excel表中,按照表字段正确排序:(注:(Excel文件的名称最好和数据库的名称一致,sheet表的名字最好和表名 ...

  2. java 使用POI批量导入excel数据

    一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取e ...

  3. 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin

    之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...

  4. java-poi 批量导入excel数据

    1,首先,前端发送MultipartFile类型文件,后端接收 2,分别创建多个ImportParams对象(easypoi),对应工作蒲 注意:pom中 要有相对应的配置 <!-- easyp ...

  5. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  6. MySQL批量导入Excel、txt数据

    MySQL批量导入Excel.txt数据 我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQ ...

  7. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  8. 从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)

    今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...

  9. 【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)

    今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...

随机推荐

  1. 将session存入数据库,memcache的方法

    //存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){    die('连接数据库失败');}$link = m ...

  2. Agc017_D Game on Tree

    传送门 题目大意 给定一棵树,$1$号节点为根,两个人轮流操作,每次选择一个根节点外的点,删掉它以及它的子树,不能操作者输,求两人均采用最优策略下先手胜利还是后手胜利. 题解 经典问题树上删边游戏,根 ...

  3. D唐纳德和他的数学老师(华师网络赛)(二分匹配,最大流)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 唐纳德是一个数学天才.有一天,他的数学老师决定为难一下他.他跟唐纳德说:「现在 ...

  4. 【整理】如何选取后缀数组&&后缀自动机

    后缀家族已知成员         后缀树         后缀数组         后缀自动机         后缀仙人掌         后缀预言         后缀Splay ? 后缀树是后缀数 ...

  5. 【转】CSS制作图形速查表-存档

      http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet http://www.cnblogs.com/powertoolsteam/p/c ...

  6. bzoj 3514: GERALD07加强版 lct+可持久化线段树

    题目大意: N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. 题解: 这道题考试的时候没想出来 于是便爆炸了 结果今天下午拿出昨天准备的题表准备做题的时候 题表里就有这题 ...

  7. POJ3417Network

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5311   Accepted: 1523 Descripti ...

  8. tx2在自制载板上无法识别usb以及pcie无法读取数据

    注意使用的系统版本是Jetpack-3.1,其它版本的系统上没有测试过!!! 刷机时替换dtb文件: 将Jetpack刷机包 64_TX2/Linux_for_Tegra_tx2/kernel/dtb ...

  9. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  10. Ruby迭代器(Iterator)

    简单的讲,一个迭代器就是一个能接受代码块的方法.当初为了进行迭代操作而设置了带块方法,现在很多时候仍然称它为迭带器. 可实际上,早期版本的 Ruby 将使用代码块的方法称为迭代器,因为它们就是被设计来 ...