springboot批量导入excel数据
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
对应
MultipartFile file
2.创建对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
3.获取sheet(默认第一个)
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
3.1 控制层源码
@RequestMapping("/import")
public void importExcel(@RequestParam("file") MultipartFile file) throws Exception{
InputStream inputStream = file.getInputStream();
//07年的 不兼容之前
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
//获取行数
int lastRowNum = sheet.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
XSSFRow row = sheet.getRow(i);
QuChannel quChannel = new QuChannel();
if (row.getCell(0) != null){
row.getCell(0).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setChannel(row.getCell(0).getStringCellValue());
}
if (row.getCell(1) != null){
row.getCell(1).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setChannelName(row.getCell(1).getStringCellValue());
}
if (row.getCell(2) != null){
row.getCell(2).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setRemarks(row.getCell(2).getStringCellValue());
}
if (row.getCell(3) != null){
quChannel.setChannelSource((int) row.getCell(3).getNumericCellValue());
}
if (row.getCell(4) != null){
quChannel.setActivityType((int) row.getCell(4).getNumericCellValue());
}
if (row.getCell(5) != null){
quChannel.setDeliveryTime(row.getCell(5).getDateCellValue());
}
if (row.getCell(6) != null){
row.getCell(6).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setOriginalLink(row.getCell(6).getStringCellValue());
}
if (row.getCell(7) != null){
row.getCell(7).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setSaLink(row.getCell(7).getStringCellValue());
}
if (row.getCell(8) != null){
quChannel.setDeliveryMode((int) row.getCell(8).getNumericCellValue());
}
if (row.getCell(9) != null){
quChannel.setCreateGroup((int) row.getCell(9).getNumericCellValue());
}
if (row.getCell(10) != null){
row.getCell(10).setCellType(XSSFCell.CELL_TYPE_STRING);
quChannel.setRemark(row.getCell(10).getStringCellValue());
}
quChannelMapper.insert(quChannel);
}
}
3.2 review
1.避免将sql写在for循环里面,改进的话可以创建一个列表list,将对象add进去,然后在循环外面进行批量插入
2.想要去重的话可以使用set的不能重复添加特性
3.注意excel的字段与类属性的对应关系,如果excel字段是string,但是累属性是整形的话,可以使用枚举类
暂时想到这么多 欢迎指教评论
springboot批量导入excel数据的更多相关文章
- MySQL批量导入Excel数据
MySQL批量导入Excel数据 1.确定需要导入数据的表名称以及字段,然后在新建的Excel表中,按照表字段正确排序:(注:(Excel文件的名称最好和数据库的名称一致,sheet表的名字最好和表名 ...
- java 使用POI批量导入excel数据
一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取e ...
- 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin
之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...
- java-poi 批量导入excel数据
1,首先,前端发送MultipartFile类型文件,后端接收 2,分别创建多个ImportParams对象(easypoi),对应工作蒲 注意:pom中 要有相对应的配置 <!-- easyp ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- MySQL批量导入Excel、txt数据
MySQL批量导入Excel.txt数据 我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQ ...
- 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...
- 从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)
今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...
- 【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)
今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...
随机推荐
- 【leetcode刷题笔记】Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- JS性能之滚动条之外的其他部分
问题: 如果一个页面宽高比较大,也就是页面需要滚动条来查看其他页面内容,这时候,在滚动条之外的其他部分,是依然处于运行状态. 比如那部分有视频播放,则那些视频虽然在当前窗口看不到,但它们还是会处于播放 ...
- 51nod 1450 闯关游戏——期望dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办. ...
- Ubuntu下安装软件
在ubuntu当中,安装应用程序有三种方法,分别是:apt-get,dpkg安装deb和make install安装源码包三种. apt-get方法 使用apt-get install来安装应用程序算 ...
- live555源代码分析
live555源代码下载(VC6工程):http://download.csdn.net/detail/leixiaohua1020/6374387 liveMedia 项目(http://www.l ...
- python2.7系统性能监控psutil模块
系统环境:Centos7.4,系统自带python2.7.5 登录psutil官网,下载psutil的tar包:psutil-5.4.6.tar.gz,并使用命名sha256sum和官网的包进行核对, ...
- LAMP 1.2 Apache编译安装
1.下载 ...
- struts2 ajax jquery返回json类型
三个页面, <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC & ...
- hive查询ncdc天气数据
使用hive查询ncdc天气数据 在hive中将ncdc天气数据导入,然后执行查询shell,可以让hive自动生成mapredjob,快速去的想要的数据结果. 1. 在hive中创建ncdc表,这个 ...
- [51nod1247]可能的路径(思维题)
题意:给定(a,b),(x,y) ,(a,b)可以通向(a-b,b) (a+b,b) (a,a+b) (a,a-b) 求能否到达(x,y) 解题关键:类似于更相减损,变换过程中gcd是一样的. #i ...