Excel导入功能的实现

业务分析:1.能够导入excel文件类型

                  2.读取该上传文件内容

                  3.内容展示在页面上,可修改,可勾选保存,保存时对内容进行校验。

代码实现:jsp前台页面

<form id="mainForm" action="list.action" method="post">
		<!--用户编辑 -->
		<div class="container dw_xd">
			<div class="radius_top">
				<span></span>
			</div>
			<div class="radius_mid zsy" id="content">
				<div class="pd0_30">
					<div class="edit_tit">
						<span class="drift_lt">导入三统一用户</span>
						<div class="xddw_0213 dq_r">
							<input
								onchange="document.getElementById('textfield').value=this.value"
								class="file_rt_0213" name="filePath" id="filePath" type="file" />
							<input id='textfield' name="" type="text" class="percent_w168" />
							<input class="btn_wt63" type="button"
								onclick="document.getElementById('logoImage').focus();"
								value="浏览" /> <input id="btn_sc" class="btn_wt63" type="button"
								value="上传" />
						</div>
					</div>
				</div>

				<div class="pd0_30" id="dr_account_info" style="display: none;">
					<script language="javascript"
						src="${ctx}/trust/js/plugins/myajax.js"></script>
					<table class="dr_ta">
						<tr>
                          <!-- 显示表头内容 -->      
							<th width="20"><input id="choseAll" type="checkbox" /></th>
							<th>序号</th>
							<th>账号</th>
							<th>登录名称</th>
							<th>人员姓名</th>
							<th>认证标识</th>
							<th>人员标识</th>
							<th>用户类型</th>
						</tr>
						<tfoot id="tab_account_info">
							<!-- 显示导入文件的内容 -->
						</tfoot>
					</table>
				</div>
			</div>
			<div class="btm">
				<span class="btm_rt"></span> <input name="" type="button"
					class="page_w68_glay page_f4 drift_rt" value="返回" id="history_skip" />
				<input id="save_import_resource" name="" type="button"
					class="page_w68 drift_rt" value="保存" />
				<div class="clean"></div>
			</div>
		</div>

	</form>

js   显示上传的文件内容   验证    保存

  $("#btn_sc").click(function() {
        if($("#filePath").val()=="" || $("#filePath").val()==null){
            jAlert("请选择上传文件");
            return;
        }
        if($("#filePath").val().indexOf(".raot")>1){
            uploadContainPasswordFile();
            $("#filePath").val("");
            $("#textfield").val("");
            return ;
        }
}

  function displayImportInfo(data){
      $("#tab_account_info").html("");
//    	alert(data);
    	console.log("----"+data)
        var index=0;
        var length = data.length;
//    	alert(length);
        //回显用户选择上传的数据
        for(var i=0;i<length;i++){
        		 var error="";
        		  var tr=" <tr trFirst='"+index+"_show' name='resourceData'><td name='index_num' align='center'  width='5%'><input type='checkbox' class='choice' flag='1'/></td>"+"<td align='center' name='user_count' width='5%'>"+(index+1)+"</td>";
        		  //不加密时
        		   if(data[i][0] != null) {
       		          tr=tr+" <td name='fort_user_account'><input class='addData' name='fortUser"+i+"' value='"+(data[i][0])+"'></input></td>";
     		      }
        		   if(data[i][1]!= null) {
     		          tr=tr+" <td name='fort_logon_name'><input class='addData' name='fortUser"+i+"' value='"+(data[i][1])+"'></input></td>";
     		      }
     		      if(data[i][2]!= null) {
     		          tr=tr+" <td id='fortUserName' name='fort_user_name'><input class='addData' name='fortUser"+i+"' value='"+(data[i][2])+"'></input></td>";
     		      }
     		      if(data[i][3]!= null) {
    		          tr=tr+" <td name='fort_guid'><input class='addData' id='fort_guid' name='fortUser"+i+"' value='"+(data[i][3])+"'></input></td>";
     		      }
     		      if(data[i][4]!= null) {
     		          tr=tr+" <td name='fort_user_guid'><input class='addData' name='fortUser"+i+"' value='"+(data[i][4])+"'></input></td>";
     		      }
						if(data[i][5]=="新发现"){
							tr=tr+"<td name='fort_user_type' align='center'><select name='fortUser"+i+"'>"+
							"<option value='0' selected='selected'>新发现</option>"+
							"<option value='1'>已导入</option>" +
							"<option value='2'>排除</option></select>";
						}else if(data[i][5]=="已导入"){
								tr=tr+"<td name='fort_user_type' align='center'><select name='fortUser"+i+"'>"+
								"<option value='0'>新发现</option>"+
								"<option value='1' selected='selected'>已导入</option>" +
								"<option value='2'>排除</option></select>";
						}else if(data[i][5]=="排除"){
								tr=tr+"<td name='fort_user_type' align='center'><select name='fortUser"+i+"'>"+
								"<option value='0'>新发现</option>"+
								"<option value='1' >已导入</option>" +
								"<option value='2' selected='selected'>排除</option></select>";
						}else{
							tr=tr+"<td name='fort_user_type' align='center'><select name='fortUser"+i+"'>"+
							"<option value='-1'selected='selected'>请选择</option>"+
							"<option value='0'>新发现</option>"+
							"<option value='1'>已导入</option>" +
							"<option value='2'>排除</option></select>";
						}
						tr+="</td>";
		     tr=tr+"</tr>";
          $("#tab_account_info").append(tr);
            
            if(data[i].errorInfo != null){
                var dataAccount = data[i].errorInfo;
                var error = "";
                for(var j=0; j<dataAccount.length; j++){
                    var accountInfo = dataAccount[j];
//                    if( !( data[i].fortParentIp == "" || data[i].fortParentIp == null ||  
//                    		typeof(data[i].fortParentIp) == undefined ) ){
//                    	
//                    	continue;
//                    }
                    if(endWith(accountInfo,"添加成功")){
                        error +="<span succ='succ' >"+dataAccount[j] +"</span></br>";  
                    }else{
                        error +="<span class='red' succ='fail' >"+dataAccount[j] +"</span></br>";  
                    }
                }
                
                tr=tr+"</tr>";
                $("#tab_account_info").append(tr);
                $("tr[trFirst='"+index+"_show']").css('background-color','#ECEDEF');
                $("#tab_account_info").append("<tr trSecond='"+index+"_show' ><td colspan='6' >导入警告信息:<br/>"+error+"</td></tr>");
            }     
             index++;
        }
        $("#dr_account_info").show();
//        $("tr[trSecond]").hide();
        $("tr[trSecond]").css('background-color','#F8F8F8');
        $("#tab_account_info").show();
}

//保存按钮
$("#save_import_resource").click(function() {	
    	save_ajax();
    });

//进行信息验证
function save_ajax(){
		var flag=true;
		indexs="";
		var reg = /[^\x00-\xff]/;
		$("input[class='choice']:checked").each(function(){
			var obj=$(this).parent();
			if(!validateUserAccount(obj.nextAll("td[name='fort_user_account']").find("input:eq(0)").val())){
				if(flag){
					flag=false;
					return false;
				}
			}
			if( !validateUserName(obj.nextAll("td[name='fort_logon_name']").find("input:eq(0)").val())){
				if(flag){
					flag=false;
					return false;
				}
			}
			if( (obj.nextAll("td[name='fort_user_name']").find("input:eq(0)").val()) == "" ||(obj.nextAll("td[name='fort_user_name']").find("input:eq(0)").val()) == undefined){
				if(flag){
					jAlert("姓名不能为空");
					flag=false;
				}
			}

			indexs+=obj.next("td[name='user_count']").html()+",";
		});
		indexs=indexs.substring(0,indexs.length-1);
//		alert(indexs+"indexs");
		if(indexs==""&&flag){
			jAlert("请选择要保存的用户");
			return;
		}
		if(flag){
			$().showOverlay();

			//保存方法
			save_ajax_impl("user_import_form","/excel/three/userImportExport",indexs);
		}
	}

/*
	*批量处理,提交表单中的多个用户数据
	*formId   表单名称
	*requestName 请求名称
	*indexs  参数
	*/
function save_ajax_impl(formId,requestName,indexs){
	var data =  $("#"+formId).serialize();
	var data1=getData();
	$.ajax({
		cache : false,
		type : 'POST',
		url : window.top.ctx+requestName+'/save_user'+'?indexs='+indexs+'&version=normal',
		dataType : 'text',
		data:data1,
		async : true, 
		success : function(data) {
			var dataObj = eval("(" + data + ")");
			var index=dataObj.index;//改变属性
			var indextemp=dataObj.indextemp;//去除checkbox
			if(dataObj.message!=undefined){
				$().hideOverlay();
				uncheckbox(indexs,indextemp);
				jAlert(dataObj.message,'提示');
				return;
			}
			if(dataObj.mess!=undefined){
				//找出已经添加好的用户,将多选框去除
				if(index!=undefined){
					uncheckbox(indexs,indextemp);
					changecheck(indexs,index);
					//改变
//					if(getData()!=null ||getData()!=""){
					indexs="";
					$("input[falg='0']").each(function(){
						var obj=$(this).parent();
						indexs+=obj.next("td[name='user_count']").html()+",";
					});
					indexs=indexs.substring(0,indexs.length-1);
//					save_ajax();
					if(indexs!=""){
					save_ajax_impl(formId,requestName,indexs);
//					alert(indexs);
					return;
				}

				}
				var str="";
				var mess=dataObj.mess.split("\!");
				for(i=0;i<mess.length;i++){
					str+=mess[i]+"<br>";
				}
				jAlert(str,'提示');
			}
			else{
				uncheckbox(indexs,index);
				changecheck(indexs,index);
//				if(getData()!=null ||getData()!=""){
					indexs="";
					$("input[falg='0']").each(function(){
						var obj=$(this).parent();
						indexs+=obj.next("td[name='user_count']").html()+",";
						
					});
					indexs=indexs.substring(0,indexs.length-1);
//					save_ajax();
					if(indexs!=""){
					save_ajax_impl(formId,requestName,indexs);
					return;
				}
				jAlert('批量保存成功!', '','',function(){
					checkIfAllImported();});
			}
			$().hideOverlay();
		},
		error : function() {
			jAlert("批量保存失败!",'警告',"warn");
		}
	});
}

//传到后台需要保存的内容 
function getData(){
	var data1="";
	$("input[class='choice']:checked").each(function(){
		var eq03 = $(this).parent().parent().children('td').eq(3).find("input").val();
		var eq04 = $(this).parent().parent().children('td').eq(4).find("input").val();
		var eq05 = $(this).parent().parent().children('td').eq(5).find("input").val();
		var eq06 = $(this).parent().parent().children('td').eq(6).find("input").val();

		var eq3 = Base64.encode(eq03);
		var eq4 = Base64.encode(eq04);
		var eq5 = Base64.encode(eq05);
		var eq6 = Base64.encode(eq06);
		
		eq3 = $(this).parent().parent().children('td').eq(3).find("input").val(eq3);
		eq4 = $(this).parent().parent().children('td').eq(4).find("input").val(eq4);
		eq5 = $(this).parent().parent().children('td').eq(5).find("input").val(eq5);
		eq6 = $(this).parent().parent().children('td').eq(6).find("input").val(eq6);
		
		data1=data1+$(this).parent().parent().children('td').eq(2).find("input").serialize()+"&";
		data1=data1+decodeURIComponent($(this).parent().parent().children('td').eq(3).find("input").serialize(),true)+"&";
		data1=data1+decodeURIComponent($(this).parent().parent().children('td').eq(4).find("input").serialize(),true)+"&";
		data1=data1+decodeURIComponent($(this).parent().parent().children('td').eq(5).find("input").serialize(),true)+"&";
		data1=data1+decodeURIComponent($(this).parent().parent().children('td').eq(6).find("input").serialize(),true)+"&";
		data1=data1+$(this).parent().parent().children('td').eq(7).find("select").serialize()+"&";//登录修改密码
		
		$(this).parent().parent().children('td').eq(3).find("input").val(eq03);
		$(this).parent().parent().children('td').eq(4).find("input").val(eq04);
		$(this).parent().parent().children('td').eq(5).find("input").val(eq05);
		$(this).parent().parent().children('td').eq(6).find("input").val(eq06);

	});
	return data1;
}

Contrller  读取上传的文件内容返回前台处理

//接收上传的三统一用户文件
	@RequestMapping(value = "/upload_account_password")
	@ResponseBody
	public void uploadAccountPassword(@RequestParam(value = "filePath") MultipartFile file,HttpServletResponse response) {
		log.info("接收上传的文件");
		response.setHeader("Content-type", "text/html");
		PrintWriter out = null;
		JSONObject json = new JSONObject();
		String tempDirPath = makeRestorPath();
		try {
			out = response.getWriter();
			String fileName = file.getOriginalFilename();
			if (!fileName.trim().toLowerCase().endsWith(".xls") && !fileName.trim().toLowerCase().endsWith(".xlsx")) {
				json.put("datas", "");
				return;
			}

			String uploadFilePath = tempDirPath + fileName;
			log.info("uploadFilePath------------------"+uploadFilePath);

			// 文件类型正确,在指定路径下创建文件
			File targetFile = new File(uploadFilePath);
			FileUtil.createFile(targetFile);

			try {

				// 复制传输的文件到指定文件
				file.transferTo(targetFile);

				List<List<String>> data = readExcel(targetFile);
				json.put("datas", data);
				for (List<String> list : data) {
						log.info("list------------------"+list);
						
				}		

			} catch (Exception e) {
				json.put("datas", "");
				e.printStackTrace();
			}

		} catch (IOException e) {

			e.printStackTrace();
		} catch (JSONException e) {

			e.printStackTrace();
		} finally {
			try {
				out.println(json);
				out.flush();
				FileUtil.delete(tempDirPath);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}

	}

/**
     * 获取数据
     * @param file
     * @return
     * @throws Exception
     */
    private static List<List<String>> readExcel(File file) throws Exception {

        // 创建输入流,读取Excel
        InputStream is = new FileInputStream(file.getAbsolutePath());
        // jxl提供的Workbook类
        Workbook wb = Workbook.getWorkbook(is);
        // 只有一个sheet,直接处理
        //创建一个Sheet对象
        Sheet sheet = wb.getSheet(0);
        // 得到所有的行数
        int rows = sheet.getRows();
        // 所有的数据
        List<List<String>> allData = new ArrayList<List<String>>();
        // 越过第一行 它是列名称
        for (int j = 1; j < rows; j++) {

            List<String> oneData = new ArrayList<String>();
            // 得到每一行的单元格的数据
            Cell[] cells = sheet.getRow(j);
            for (int k = 0; k < cells.length; k++) {

                oneData.add(cells[k].getContents().trim());
            }
            // 存储每一条数据
            allData.add(oneData);
            // 打印出每一条数据
            log.info(allData+"allData============");
            //System.out.println(oneData);

        }
        return allData;

    }

private String makeRestorPath() {
		String restorePath = getProgramPath("upload") + File.separator +         
        ParseUtil.dateToString10(new Date())
				+ File.separator;
		return restorePath;
	}
	

/**
	 * 批量存储多个用户
	 * @throws Throwable 
	 */
	@RequestMapping(value = "/save_user")
	@ResponseBody
	public Object saveUser() throws Throwable {
		List<String> indexArrays = new ArrayList<String>();
		List<String> indexArrayTemp=new ArrayList<String>();
		try {
		  log.info("批量添加用户");
		  String[] indexArray = getParameter("indexs").split(",");
		  System.out.println(indexArray+"");
		  FortSystemLogFactory.getInnerHandleSystemLog().getSystemLogType("用户","批量导入用户", true);
		  Thread.sleep(1000);
		
			  for (int i = 0; i<indexArray.length; i++) {
				  log.info(indexArray[i]+"===========================indexArray[i]");
				  String[] obj = getParameterValues("fortUser" + (Integer.parseInt(indexArray[i])-1));
//				  BASE64Decoder decoder = new BASE64Decoder();
//		  
				  log.info(indexArray.length+"===========================length");
				
//					String fortLogonName = new String(decoder.decodeBuffer(obj[1]));
				  if(obj.length!=0){
				  //调用验证批量用户的方法
				  if (validate_import(obj)) {
					  indexArrays.add(indexArray[i]);
					  continue;
				  }
				  FortThreeUniformUser01 fortThreeUniformUser = createFortUser(obj);
//				  this.fortUserService.saveEntity(fortThreeUniformUser);
				  //添加用户
				int num = this.fortThreeUniformUserService01.saveFortThreeUniformUser(fortThreeUniformUser);
//				log.info(num+"===========================num");
				  indexArrayTemp.add(indexArray[i]);
				  indexArrays.add(indexArray[i]);
			  }
			  }	  
			  //删除服务器端临时文件d://poi.xls
			  File file = new File(getProgramPath("upload", FileImportUtil.EXCEL_FULL_NAME));
			  if (file.exists()) {
				  file.delete();
			  }
		} catch (Exception e) {
			result = Constant.AJAX_RESULT_FAILURE;
			log.error(e.getMessage(), e);
		} finally {
			resultData.put("indextemp", indexArrayTemp);
			resultData.put("index", indexArrays);
			resultData.put(Constant.AJAX_RESULT_DEFAULT_MAP_KEY, result);
		}
		return resultData;
	}


/**
	 * 验证批量添加的用户
	 * @param obj
	 * @return
	 * @throws Throwable
	 */
	private boolean validate_import(String[] obj) throws Throwable {
		Example example = new Example();
		boolean flag;
		String mess = "";
		// 判断账号、口令及用户组是否为空
		 BASE64Decoder decoder = new BASE64Decoder();
			log.info(obj[0]+"flag");
		obj[1] = new String(decoder.decodeBuffer(obj[1]));
		obj[2] = new String(decoder.decodeBuffer(obj[2]));
		log.info(obj[0]+obj[1]+obj[2]);
		if ("".equals(obj[0]) || "".equals(obj[1]) || "".equals(obj[2])){
			mess += "请输入账号、名称、姓名!";
		}
		
		example.createCriteria().andFieldEqualTo("fort_user_account",obj[0]);
//		flag = this.fortUserService.hasEntityByExample(example);
		flag = this.fortThreeUniformUserService01.hasEntityByExample(example);
		log.info(flag+"flag");
		// 判断账号是否重复
		if (flag) {
			mess += "部分用户账号已存在!";
		}
		if (!"".equals(mess)) {
			resultData.put("mess", mess);
			return true;
		}
		return false;
	}

/**
	 * 批量添加用户时,设置用户对象
	 * @param obj
	 * @return
	 * @throws Exception 
	 */
	private FortThreeUniformUser01 createFortUser(String[] obj) throws Exception {
		log.info("obj=========="+obj[0]+","+obj[1]+","+obj[2]+","+obj[3]+","+obj[4]+","+obj[5]);
		FortThreeUniformUser01 fortThreeUniformUser = new FortThreeUniformUser01();
		BASE64Decoder decoder = new BASE64Decoder();
		fortThreeUniformUser.setFortThreeUniformUserId(UniqId.getId());
		fortThreeUniformUser.setFortUserAccount(obj[0]);
		fortThreeUniformUser.setFortLogonName(obj[1]);
		fortThreeUniformUser.setFortUserName(new String(obj[2]));
		fortThreeUniformUser.setFortGuid(new String(decoder.decodeBuffer(obj[3])));
		fortThreeUniformUser.setFortUserGuid(new String(decoder.decodeBuffer(obj[4])));
		if(obj[5].equals("-1")){
			 fortThreeUniformUser.setFortUserType(null);
			log.info(fortThreeUniformUser.getFortUserType()+"FortUserType01");
		 }else {
			 fortThreeUniformUser.setFortUserType(obj[5]);
			 log.info(fortThreeUniformUser.getFortUserType()+"FortUserType");
		 }
		
		if(fortThreeUniformUser.getFortCreateDate() == "" || fortThreeUniformUser.getFortCreateDate() == null ) {
			fortThreeUniformUser.setFortCreateDate(getCurrentDate());
		}
		
		return fortThreeUniformUser;
	}
	
	

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值