后端代码

controller层

@RequestMapping(value = "/importExcel", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public ResponseBean importExcel(HttpServletRequest request) {SUser sUser = JwtService.getConnUser(request);MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;List<MultipartFile> file = multipartRequest.getFiles("file");String fileName = file.get(0).getOriginalFilename();try {return importService.importExcel(fileName, file.get(0), sUser);} catch (Exception e) {e.printStackTrace();}return new ResponseBean(false, 0, "解析xls文件失败", null);
}

service层

@Transactional(readOnly = false,rollbackFor = Exception.class)@Overridepublic ResponseBean importExcel(String fileName, MultipartFile file) throws Exception {List<XXX> buses = new ArrayList<>();List<XXX> isCoveredList = new ArrayList<>();List<String> isCoveredIds = new ArrayList<>();if (!fileName.matches("^.+\\.(?i)(xls)$")) {return new ResponseBean(false, 0, "上传文件格式不正确", null);}InputStream is = file.getInputStream();Workbook wb = null;wb = new HSSFWorkbook(is);Sheet sheet = wb.getSheetAt(0);Bus bus;for (int r = 1; r <= sheet.getLastRowNum(); r++) {//r = 2 表示从第三行开始循环 如果你的第三行开始是数据Row row = sheet.getRow(r);//通过sheet表单对象得到 行对象if (row == null){continue;}bus = new Bus();
//                if( row.getCell(0).getCellType() != 1){
//                    // 循环时,得到每一行的单元格进行判断
//                     throw new MyException("导入失败(第"+(r+1)+"行,用户名请设为文本格式)");
//                }row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);//设置读取转String类型row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);//设置读取转String类型//得到每一行的第一个单元格的值 String vehicleNo = row.getCell(0).getStringCellValue();if(vehicleNo == null || vehicleNo.isEmpty()){//判断是否为空return new ResponseBean(false, 0, "导入失败(第"+(r+1)+"行,未填写)", null);}//得到每一行的第二个单元格的值 日期String exp = null;if (!StringUtils.isEmpty(row.getCell(1))) {if (row.getCell(1).getCellType() == 1){//string类型exp = row.getCell(1).getStringCellValue();} else {//日期类型SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {exp = sdf.format(row.getCell(1).getDateCellValue());// 日期} catch (Exception e) {try {throw new Exception("exception on get date data !".concat(e.toString()));} catch (Exception e1) {e1.printStackTrace();}}finally{sdf = null;}}}else {return new ResponseBean(false, 0, "导入失败(第"+(r+1)+"行,时间未填写)", null);}String plateColorCodeName = row.getCell(2).getStringCellValue();Integer plateColorCode;if (!StringUtils.isEmpty(plateColorCodeName)) {if ("蓝色".equals(plateColorCodeName)){plateColorCode = 1;} else if ("黄色".equals(plateColorCodeName)){plateColorCode = 2;} else {plateColorCode = 0;}} else {return new ResponseBean(false, 0, "导入失败(第"+(r+1)+"行,未填写)", null);}//对车牌号进行查重操作,若有重复的则覆盖,并将被覆盖的存到一个list里Bus isNeedCover = checkIsNeedCover(vehicleNo,plateColorCode);if (!StringUtils.isEmpty(isNeedCover.getId())) {isCoveredList.add(isNeedCover);isCoveredIds.add(isNeedCover.getId());}String company = null;if (!StringUtils.isEmpty(row.getCell(3))) {row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);//设置读取转String类型company = row.getCell(3).getStringCellValue();}//完整的循环一次 就组成了一个对象bus.setVehicleNo(vehicleNo);bus.setExp(exp);bus.setPlateColorCode(Integer.valueOf(plateColorCode));if (!StringUtils.isEmpty(company)){bus.setCompany(company);}buses.add(bus);}this.insertBatch(buses);//删除被覆盖的listthis.deleteBatchIds(isCoveredIds);return new ResponseBean(true, 0, "解析xls文件成功", isCoveredList);}

html页面

<button class="layui-btn btn-export margintop-16" id="btn_export" style="float: left;"onclick="exportFormwork()">模板导出
</button><div class="file-upload" id="handleXls" style="float: left;line-height: 51.4px;"><input type="file" name="multipartFile" id="xlsFile" style="opacity: 0;width: 0px; height: 1px;"/><label for="multipartFile" class='layui-btn layui-btn-warm layui-btn layui-btn-sm layui-btn-fluid' onclick="inputTrigger()" style="width: 120px;">选择xls文件</label>
</div>

js

/*** 导入模板导出*/
function exportFormwork() {location.href = url.exportFormwork;
}
/**
* 导入
*/
function inputTrigger() {
$('#xlsFile').trigger('click')
}
var xlsFile = [];
/*** 上传文件*/
$(document).on('change','#xlsFile', function () {for (var i = 0; i < $(this)[0].files.length; i++) {xlsFile.push($(this)[0].files[i]);}var formData = new FormData();for (var i = 0; i < xlsFile.length; i++) {formData.append('file', xlsFile[i]);}$.mask_element('#test_mask', 'xls文件解析中'); //打开加载层$.ajax({url: url.importShuttleBus,method: "post",data: formData,dataType: 'JSON',cache: false, // 不缓存processData: false, // jQuery不要去处理发送的数据contentType: false, // jQuery不要去设置Content-Type请求头success: function (data) {$.mask_close('#test_mask');//关闭加载层if (data.isSuccess) {//刷新tablesearchSubmitInfo();layer.msg(data.responseMsg);} else {layer.msg(data.responseMsg, {icon: 5})}},error: function (e) {layer.msg('上传文件过大[总上传大小不得超过50M]', {icon: 5});$.mask_close('#test_mask');//关闭加载层}})xlsFile = [];event.target.value="";
})

java 导出文件上传模板,上传Excel文件批量导入数据相关推荐

  1. java实现excel文件批量导入数据

    具体实现: 以学生信息为例,将Excel模板信息配置在XML文件中,通过POI实现对excel文件读取操作,然后将读取的数据插入数据库中.具体思路是将模板信息配置在xml中,在项目启动时,通过spri ...

  2. 微信小程序 -- 数据库数据excel文件批量导入

    一.excel文件批量导入数据到数据库 1.创建node.js函数upload,点击upload右键外部终端中安装类库 npm install node-xlsx 2.云函数代码 const clou ...

  3. 多个excel文件批量导入到数据库

    多个excel文件批量导入到数据库 摘要:我们可以用navicate等数据库编辑器的excel导入功能将一个excel导入到数据库,但是我们有多个excel甚至成百上千怎么办?这个时候用navicat ...

  4. vue表单中批量导入功能_spring boot mybatis+ vue 使用POI实现从Excel中批量导入数据

    一.前端vue+element 1.前端使用element的upload组件来实现文件的上传 style="display: inline-flex;margin-right: 8px&qu ...

  5. Java POI实现Excel文件批量导入(兼容xls,xlsx)

    1.POI使用详解 1.1.什么是Apache POI? POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Micros ...

  6. 通过Excel表格批量导入数据

    业务场景 批量导入用户数据 依赖 导入操作Excel表格相关依赖 <dependency><groupId>org.apache.poi</groupId>< ...

  7. 自制工具将excel文件批量导入到mongodb

    使用方法 下载此工具(度盘 密码: sbv6),这是一个exe文件,双击可直接运行 将这个工具放到你要处理的表格所在的目录,比如上图中有一个年级表的示例文件 确保已启动mongodb服务 双击脚本工具 ...

  8. Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)

    批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...

  9. Java实现Excel文件的导入功能

    近期在工作上,遇到了实现Excel文件的导入功能,在此和小伙伴们分享一下过程. 实现Excel文件的导入呢,首先我们需要先上传文件,然后在后端进行解析文件中的内容.这里我们需要用到 poi 的这样一个 ...

最新文章

  1. HarmonyOS UI开发 PositionLayout(位置布局) 的使用
  2. arcpy实现空间查询_布隆过滤!Python实现亿级数据集中元素快速查找
  3. 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
  4. 现有CSDN博客的排名机制
  5. Linux Shell常用技巧(五)
  6. C++ 泛型编程 实现红黑树RBTree
  7. PHP授权系统+盗版追踪+域名IP双授权+在线加密系统
  8. Perl 数字与字符串运算符之区别
  9. acl 允许同网段访问_ENSP模拟交换环境中调用高级ACL限制不同网段之间互访
  10. angularjs sill 创建项目_AngularJS快速上手,从安装到运行
  11. Oracle12c错误01017,ORACLE12.2中用户无法登陆报ORA-01017的解决办法
  12. 秋招春招总结,经验分享(计算机专业)
  13. 分块矩阵的逆矩阵的公式记忆方法
  14. B. 在哈尔滨的寒风中
  15. uniapp的语音功能
  16. matlab处理矩阵的一些简易操作和画图的一些小技巧
  17. 职场历练【管理学之三】
  18. 二十三种设计模式彩图XXOO
  19. PHP 使用parse_ini_file读取文本文档遇到中文乱码问题
  20. 南京邮电大学物理实验模拟试卷

热门文章

  1. ES6——函数参数默认值
  2. LeetCode(1108)——IP 地址无效化(JavaScript)
  3. 经常看到网吧无盘系统,那操作系统装在哪?
  4. 博士和博士后的有什么区别?
  5. 柿子不能和什么食物一起吃
  6. 关于职业规划,如何自我实现?
  7. Golang标准库RPC实践及改进
  8. 不仅仅于 Json和XML ,快来学习Google出品的序列化神器Protocol Buffer
  9. access mysql 同步,SQLServer2008 同步Access数据库
  10. apt-get命令_DBATools中的Get-DbaHelpIndex命令