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中的 ...
随机推荐
- C趣味题目
http://www.cnblogs.com/lua5/archive/2010/12/05/1896755.html c语言趣味题目 http://www.cppblog.com/OnTheWa ...
- 趣味Shell
Richard M. Stallman大神是谁就不用说了,一时来了兴趣,想看看Linux系统下有多少程序有这位大神参与编写的. 先把所有命令导出到文件中,遍历所有命令,用man手册查一下并过滤Stal ...
- 1038 Recover the Smallest Number (30)(30 分)
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- [SPOJ-DISUBSTR]Distinct Substrings
vjudge 题意 给你一个串,求不同字串个数. \(n\le10^5\) sol 直接建SAM然后输出\(\sum_{i=1}^{tot}len[i]-len[fa[i]]\) code #incl ...
- office2016_windows永久激活查看方法
YC7N8-G7WR6-9WR4H-6Y2W4-KBT6X 首先要保证你安装了 百云址:http://pan.baidu.com/share/home?uk=4011207371 如果你是win8,w ...
- Log Structured Merge Trees(LSM) 原理
http://www.open-open.com/lib/view/open1424916275249.html
- 外置式与增量式PID模板程序(51单片机c语言)
外置式PID模板 #define MuBiaoCS 0 //目标常数 #define CHang_aCS 0 //比例常数 #define CHang_bCS 0 //积分常数 #define CHa ...
- C#使用NPOI读取电子表格Excel到DataGridView中
上篇博文中已经介绍了如何写入Excel文件.这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中. 从Excel中读取数据并保存至DataGridView中,Excel文件第一 ...
- content-disposition attachment filename 在Firefox和IE中得到不同的结果
在Firefox中需要把filename 用双引号包起来,才能得到想要的名字,不然如果含有空格,会丢掉空格后面的部分.而IE会把空格转为_,因此也需要HttpUtility.UrlPathEncode ...
- .net 缓存之文件缓存依赖
CaCheHelp 类中代码如下: #region 根据键从缓存中读取保持的数据 /// <summary> /// 根据键从缓存中读取保持的数据 /// </summary> ...