Hibernate-EasyUI Excel文件导入

解释:通过前台的文本框的导入,在后台存入到数据库中,

1.首先就是在前台创建文本框,选择合适的Excel文件进行导入。form中的action指向的是后台Excel导入的地址,选择文件下面的<input type="file" name="file" id="import_file">name的名字要与后台的名字一致。

         <form id="wgks_form" name="wgks_form" method="post" enctype="multipart/form-data">
			<div class="bao" style="margin: 0 0 10px 20px; width: 240px; height: 30px; border: 1px solid #ccc; border-bottom: hidden; float: left;">
				<a href="javascript:;" class="file">选择文件 
					<input type="file" name="file" id="import_file">
				</a> 
				<input type="text" style="width: 150px; border: none; margin-top: 10px; float: left;" value="请选择excel文件" id="showFileName1">
			</div>
			<button type="button" class="savebtn" onclick="importFile()">开始导入</button>
		</form>

2.写开始导入的按钮的点击事件,首先是选中一行,然后给form赋值,跳转到后台Excel导入的方法中根据你选择的那一行数据的id,进行导入数据。

function importFile(type) {
		var row = $('.easyui-datagrid').datagrid('getSelected');//你选中的一行
		if (row) {
			var newUrl = '${ctx}/admin/xsgl/bjxx/import/' + row.id; //设置新提交地址
			$("#wgks_form").attr('action', newUrl); //通过jquery为action属性赋值
			if ($('#wgks_form').form('validate')) {
				pleaseWait('正在导入学生信息,请稍后!');
				$('#wgks_form').submit();
			}
		} else {
			$.messager.alert('提示', '未选择任何数据', 'info')
		}
	}

3.现在来到了后台,就是对Excel文件的验证和导入。验证文件的大小和后缀名是否正确,使用readExcel2的方法读取Excel文件,把Excel文件中的内容存放到datas中。

@RequestMapping(value = "/import/{id}", method = RequestMethod.POST)
	public String importFile(MultipartFile file, @PathVariable("id") Long id, RedirectAttributes attributes) {
		Bjxx bjxx = bjxxService.findBjxxById(id);
		String returnUrl = "redirect:/admin/xsgl/bjxx/list";
		try {
			if (file != null && file.getSize() <= 0) {// 验证文件大小
				attributes.addFlashAttribute(REDIRECT_MSG, "请选择有效文件上传!");//提示信息
				returnUrl = "redirect:/admin/xsgl/bjxx/list";
			} else {
				if (!FjxxConstants.validFileType(file, "xlsx", "xls")) {// 验证文件后缀
					attributes.addFlashAttribute(REDIRECT_MSG, "请选择有效的Excel文件上传!");//提示信息
					returnUrl = "redirect:/admin/xsgl/bjxx/list";
				} else {// 开始解析数据并导入
					List<Map<String, String>> datas = ExcelUtil.readExcel2(file);
					List<String> errorMsgs = xsxxService.importXsxx(datas, bjxx);
					if (errorMsgs.size() > 0) {
						attributes.addFlashAttribute(REDIRECT_MSG, errorMsgs);
						attributes.addFlashAttribute("errorMsgs", errorMsgs);
						returnUrl = "redirect:/admin/xsgl/bjxx/list";
					} else {
						attributes.addFlashAttribute(REDIRECT_MSG,
								MessageFormat.format("导入完成,本次共导入数据{0}条", datas.size()));
					}
				}
			}
		} catch (ServiceException e) {
			logger.warn(e.getMessage());
			attributes.addFlashAttribute(REDIRECT_MSG, e.getMessage());
			returnUrl = "redirect:/admin/xsgl/bjxx/list";
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			attributes.addFlashAttribute(REDIRECT_MSG, "导入学生数据失败,可以稍后重试!");
			returnUrl = "redirect:/admin/xsgl/bjxx/list";
		}
		return returnUrl;
	}

4.如果验证Excel文件正确的话,调用service层的importXsxx的方法,存入数据库。在controller层中读取Excel文件的内容存放到了datas中,在service层中,新建一个对象,遍历datas把数据存放到对象中,然后再次的存入数据库中。

@Transactional(readOnly = false)
	public List<String> importXsxx(List<Map<String, String>> datas, Bjxx bjxx) {
		List<String> errorMsgs = new ArrayList<>();
		if (datas.size() == 0) {//判断文件的大小
			throw new ServiceException("文件内容为空无法导入!");
		}
		List<Xsxx> xsxxList = new ArrayList<>();
		for (Map<String, String> data : datas) {// 开始遍历Excel中的验证数据
			Xsxx xsxx = new Xsxx();
			xsxx.setXm(data.get("姓名"));// 姓名
			xsxx.setXb(data.get("性别"));// 性别
			xsxx.setMz(data.get("民族"));// 民族
			xsxx.setDhhm(data.get("电话号码"));// 电话号码
			xsxx.setBjgl(bjxx);
			xsxx.setRxsj(DateUtils.stringDateFormat(data.get("入学时间"), "yyyy-MM-dd"));// 入学时间
			xsxx.setZz(data.get("住址"));// 住址
			xsxx.setSfzh(data.get("身份证号"));// 身份证号
			xsxx.setBz(data.get("备注"));// 备注
			if (exists(xsxx, "sfzh")) {//验证数据库中是否存在身份证号一致的学生,有的话提示已存在
				errorMsgs.add(MessageFormat.format("已存在身份证号“{0}”的学生,请重新导入", xsxx.getSfzh()));
			} else {
				xsxxList.add(xsxx);//没有的话就添加
			}
		}
		if (errorMsgs.size() == 0) {//判断是否存在身份证号一致的人,没有的话就存到数据库
			for (Xsxx xsxx : xsxxList) {
				this.save(xsxx);
			}
		}
		return errorMsgs;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值