java 导出文件上传模板,上传Excel文件批量导入数据
后端代码
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文件批量导入数据相关推荐
- java实现excel文件批量导入数据
具体实现: 以学生信息为例,将Excel模板信息配置在XML文件中,通过POI实现对excel文件读取操作,然后将读取的数据插入数据库中.具体思路是将模板信息配置在xml中,在项目启动时,通过spri ...
- 微信小程序 -- 数据库数据excel文件批量导入
一.excel文件批量导入数据到数据库 1.创建node.js函数upload,点击upload右键外部终端中安装类库 npm install node-xlsx 2.云函数代码 const clou ...
- 多个excel文件批量导入到数据库
多个excel文件批量导入到数据库 摘要:我们可以用navicate等数据库编辑器的excel导入功能将一个excel导入到数据库,但是我们有多个excel甚至成百上千怎么办?这个时候用navicat ...
- vue表单中批量导入功能_spring boot mybatis+ vue 使用POI实现从Excel中批量导入数据
一.前端vue+element 1.前端使用element的upload组件来实现文件的上传 style="display: inline-flex;margin-right: 8px&qu ...
- Java POI实现Excel文件批量导入(兼容xls,xlsx)
1.POI使用详解 1.1.什么是Apache POI? POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Micros ...
- 通过Excel表格批量导入数据
业务场景 批量导入用户数据 依赖 导入操作Excel表格相关依赖 <dependency><groupId>org.apache.poi</groupId>< ...
- 自制工具将excel文件批量导入到mongodb
使用方法 下载此工具(度盘 密码: sbv6),这是一个exe文件,双击可直接运行 将这个工具放到你要处理的表格所在的目录,比如上图中有一个年级表的示例文件 确保已启动mongodb服务 双击脚本工具 ...
- Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)
批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...
- Java实现Excel文件的导入功能
近期在工作上,遇到了实现Excel文件的导入功能,在此和小伙伴们分享一下过程. 实现Excel文件的导入呢,首先我们需要先上传文件,然后在后端进行解析文件中的内容.这里我们需要用到 poi 的这样一个 ...
最新文章
- HarmonyOS UI开发 PositionLayout(位置布局) 的使用
- arcpy实现空间查询_布隆过滤!Python实现亿级数据集中元素快速查找
- 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
- 现有CSDN博客的排名机制
- Linux Shell常用技巧(五)
- C++ 泛型编程 实现红黑树RBTree
- PHP授权系统+盗版追踪+域名IP双授权+在线加密系统
- Perl 数字与字符串运算符之区别
- acl 允许同网段访问_ENSP模拟交换环境中调用高级ACL限制不同网段之间互访
- angularjs sill 创建项目_AngularJS快速上手,从安装到运行
- Oracle12c错误01017,ORACLE12.2中用户无法登陆报ORA-01017的解决办法
- 秋招春招总结,经验分享(计算机专业)
- 分块矩阵的逆矩阵的公式记忆方法
- B. 在哈尔滨的寒风中
- uniapp的语音功能
- matlab处理矩阵的一些简易操作和画图的一些小技巧
- 职场历练【管理学之三】
- 二十三种设计模式彩图XXOO
- PHP 使用parse_ini_file读取文本文档遇到中文乱码问题
- 南京邮电大学物理实验模拟试卷