html:

<input type="file" name="fileName1" id="fileName1"/>
<input type="button" id="sendToUser" value="提交" />

JS

$('#sendToUser').click(function () {var $file1 = $("input[name='fileName1']").val();//用户文件内容(文件)// 判断文件是否为空if ($file1 == "") {alert("请选择上传的目标文件! ")return false;}//判断文件类型,我这里根据业务需求判断的是Excel文件var fileName1 = $file1.substring($file1.lastIndexOf(".") + 1).toLowerCase();if(fileName1 != "xls" && fileName1 !="xlsx"){alert("请选择Execl文件!");return false;}//判断文件大小var size1 = $("input[name='fileName1']")[0].files[0].size;if (size1>104857600) {alert("上传文件不能大于100M!");return false;}boo1 = true;var type = "file";var formData = new FormData();//这里需要实例化一个FormData来进行文件上传formData.append(type,$("#fileName1")[0].files[0]);//多文件上传在这里继续append//eg ://formData.append(type,$("#fileName1")[0].files[0]);$.ajax({type : "post",url : zzu+"/roughnes/importByExcel",data : formData,processData : false,contentType : false,success : function(data){if (data=="error") {alert("文件提交失败!");}else{$("input[name='userUrl']").val(data);alert("文件上传成功!");}}});})

Controller

@PostMapping("importByExcel")@ResponseBodypublic String importByExcel(@RequestParam("file") MultipartFile file){roughnesService.importByExcel(file);return "success";}

Service

 @Override@Transactional(propagation = Propagation.REQUIRED)public void importByExcel(MultipartFile file) {//获取从excel中读取的数据转成的map集合Map<Integer, Map<Object,Object>> map = new HashMap<>();try {map = OfficeUtils.readExcelContentz(file);} catch (Exception e) {e.printStackTrace();}//将class.toString() 返回的字符串转为列表,用作对map中的数据进行验证Roughnes roughnes = new Roughnes();String classParamStr = roughnes.toString();String finalStr = classParamStr.substring(classParamStr.indexOf("(") + 1).replace("=null", "").replace(")","").replace(" ", "");System.out.println(finalStr);String[] split = finalStr.split(",");List<String> paramList = Arrays.asList(split);//初始化最终接收数据的列表ArrayList<Roughnes> roughnesList = new ArrayList<>();//对从excel中读取的数据进行遍历map.forEach((key,val) -> {//接收数据的实体对象 - 此处表示的是excel中的一行Roughnes finalRoughnes = new Roughnes();val.forEach((key1,val1) -> {//此处才是一行中的每个单元格//先对k,v进行字符串转换,方便数据验证和实体类类型转换String keyStr = String.valueOf(key1);String valStr = String.valueOf(val1);if (StringUtils.isEmpty(keyStr) || StringUtils.isEmpty(valStr)) {return;}//对id的格式进行加工if ("id".equals(keyStr)) {valStr = "X-" + valStr;}//数据验证if (paramList.contains(keyStr)) {switch (keyStr) {case "id" ://向实体类set数据finalRoughnes.setId(valStr);break;case "angle":finalRoughnes.setAngle(Double.valueOf(valStr));break;case "p1Roughness" :finalRoughnes.setP1Roughness(Double.valueOf(valStr));break;case "p2Roughness":finalRoughnes.setP2Roughness(Double.valueOf(valStr));break;case "p3Roughness" :finalRoughnes.setP3Roughness(Double.valueOf(valStr));break;case "p4Roughness":finalRoughnes.setP4Roughness(Double.valueOf(valStr));break;case "p5Roughness" :finalRoughnes.setP5Roughness(Double.valueOf(valStr));break;case "averageRoughne":finalRoughnes.setAverageRoughne(Double.valueOf(valStr));break;}}});//将一行数据(一个实体)追加进列表roughnesList.add(finalRoughnes);});//迭代器移除操作/*Iterator<Roughnes> iterator = roughnesList.iterator();while (iterator.hasNext()) {if (iterator.next().getId() == null) {iterator.remove();}}*///将空行移出,数据清洗后进入数据库roughnesList.removeIf(roughnes1 -> null == roughnes1.getId());roughnesMapper.insertBatch(roughnesList);}

Mapper

<insert id="insertBatch" parameterType="list">insert into roughnes(id, angle, p1_roughness, p2_roughness, p3_roughness, p4_roughness, p5_roughness,average_roughne)values<foreach collection="list" item="item" separator=",">(#{item.id},#{item.angle},#{item.p1Roughness},#{item.p2Roughness},#{item.p3Roughness},#{item.p4Roughness},#{item.p5Roughness},#{item.averageRoughne})</foreach></insert>

OfficeUtils

public class OfficeUtils {protected static final Logger logger = LoggerFactory.getLogger(OfficeUtils.class);public static Map<Integer, Map<Object, Object>> readExcelContentz(MultipartFile file) throws Exception {Map<Integer, Map<Object, Object>> content = new HashMap<Integer, Map<Object, Object>>();// 上传文件名Workbook wb = getWb(file);if (wb == null) {throw new RuntimeException("文件上传失败");}Sheet sheet = wb.getSheetAt(0);// 得到总行数int rowNum = sheet.getLastRowNum();Row row = sheet.getRow(0);int colNum = row.getPhysicalNumberOfCells();// 正文内容应该从第二行开始,第一行为表头的标题Row firstRowCell = sheet.getRow(0);for (int i = 1; i <= rowNum; i++) {row = sheet.getRow(i);int j = 0;Map<Object, Object> cellValue = new HashMap<Object, Object>();while (j < colNum) {Object obj = getCellFormatValue(row.getCell(j));//excel的表头是下划线命名,方便进行数据清洗,将表头命名改为驼峰命名StringBuilder str = new StringBuilder(String.valueOf(firstRowCell.getCell(j)));int o = 0;StringBuilder replaced = str;//递归实现,出现多个_组合也可while ((o = str.indexOf("_",o)) != -1) {String replaceStr = String.valueOf(str.charAt(o + 1)).toUpperCase();replaced = str.replace(o+1,o+2,replaceStr);str.replace(o, o+1, "");o+=1;}cellValue.put(replaced, obj);j++;}content.put(i, cellValue);}return content;}//根据Cell类型设置数据private static Object getCellFormatValue(Cell cell) {Object cellvalue = "";if (cell != null) {switch (cell.getCellTypeEnum()) {case NUMERIC:cellvalue = String.valueOf(cell.getNumericCellValue());break;case FORMULA: {cellvalue = cell.getDateCellValue();break;}case STRING:cellvalue = cell.getRichStringCellValue().getString();break;default:cellvalue = "";}} else {cellvalue = "";}return cellvalue;}private static Workbook getWb(MultipartFile mf) {String filepath = mf.getOriginalFilename();String ext = filepath.substring(filepath.lastIndexOf("."));Workbook wb = null;try {InputStream is = mf.getInputStream();if (".xls".equals(ext)) {wb = new HSSFWorkbook(is);} else if (".xlsx".equals(ext)) {wb = new XSSFWorkbook(is);} else {wb = null;}} catch (FileNotFoundException e) {logger.error("FileNotFoundException", e);} catch (IOException e) {logger.error("IOException", e);}return wb;}
}

springboot实现读取excel插入数据库相关推荐

  1. 【poi-3.8】poi解析excel插入数据库详解

    文章目录 poi解析excel&插入数据库详解 说明 一.目的 二.准备工作 三.思路分析 四.流程图分析 五.核心代码 1:上传文件 2:获取输入流 3:初始化excel表 4:遍历行和列 ...

  2. php读取excel中数据库,ThinkPHP 框架实现的读取excel导入数据库操作示例

    本文实例讲述了ThinkPHP 框架实现的读取excel导入数据库操作.分享给大家供大家参考,具体如下: 入口文件中: require_once VENDOR_PATH.'PHPExcel/PHPEx ...

  3. EasyExcel结合Springboot的将excel导入数据库

    1. EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. EasyExcel读取Excel的解析原 ...

  4. python读取excel写入数据库_python实现读取excel写入mysql的小工具详解

    Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...

  5. PHP单文件读取excel操作数据库

    PHP读取excel数据的方法很多,很多都是要composer引入依赖包,但如果我项目业务里不需要用到,只是有时方便自己导入数据:为了引入依赖包,还加大了项目,没必要 这边介绍另一种方式,不需要框架, ...

  6. pandas读取EXCEL表格/数据库数据及其格式转换(待丰富)

    import pandas as pd import numpy as np import pymysql #导入库 def data_compare(table1, table):tb2_lack ...

  7. 【JAVA】读取excel导入数据库,形成树状结构

    最近需要导入一个excel表格,存到数据库并以树状结构读取出来 下面两张图片是需要导入的excel @Transactional(rollbackFor = Exception.class)publi ...

  8. python 读取excel 插入mysql

    最近做了一个项目,读取大量的本地大数据,格式为excel,到MySQL中,故此记录一下,代码如下,供朋友们参考 import pandas as pd import pymysql import ti ...

  9. php读取txt插入数据库,PHP读取TXT文件插入数据库

    回复讨论(解决方案) $data = '11.txt';$fp = fopen($data, 'r');while($r = fgets($fp)) { $t = join("','&quo ...

最新文章

  1. python神经网络多元函数_阿里达摩院推荐的最新400集python教程,据说懂中文就能上手...
  2. TCP/IP协议讲的明明白白
  3. 我同事狠心用 Python 3 ,刚开始就直接崩溃!你们试试......
  4. 编程测试,程序员过不去的坎?
  5. 刷脸AI供应商下调业绩预期,苹果股价应声跌掉一个小米
  6. 英语语音识别_英语 语音识别_英语语音识别软件 - 云+社区 - 腾讯云
  7. 实验二 数据库和表的操作
  8. python3基础教程[第一版] 中
  9. Wincc安装教程+破解教程(包括软件下载链接——百度网盘)
  10. 一文精讲Wireshark的抓包和分析
  11. 银联卡跨行业务地区代码标准JSON版
  12. 中国遥感卫星地面站存档数据目录服务系统
  13. 基于深度学习时间序列分类研究综述[论文阅读]
  14. TMS运输管理系统,对车辆管理、物流运输、效率提升有哪些优势?
  15. 03-word 中插入图片和表格
  16. mysql mtq_Mysql 入门学习指南
  17. MAC 常用终端命令
  18. 不等距双杆模型_对磁场中双杆模型问题的解析(精)
  19. 百科知识 ass文件如何打开
  20. 地图图像迁移研究与实现

热门文章

  1. IP组播配置与管理实战——5
  2. 获取滑动条位置,动态调整对话框显示位置;为动态添加的button添加click事件
  3. HDOJ2000题Java代码
  4. NVMe1.4 Admin Command学习(6) get feature set feature
  5. 表哥推荐python自学书籍:从入门到精通,读这十本书就够了!
  6. 将撒娇进行到底的女人
  7. 医学影像数据格式转换(.mha转.jpg)
  8. SpringBoot项目中遇到的订单支付超时未支付关闭订单的解决方案
  9. 利用C++ builder 调试RTKLIB简单介绍
  10. 2022-2027年中国养生旅游产品开发行业发展前景及投资战略咨询报告