精华内容
参与话题
问答
  • Excel实现上传 导入 解析Excel 页面展示Excel数据

    前台采用freemarker,后台Java,利用poi插件完成的Excel上传,解析,到存储到数据库。

    <#include "/commons/banner.ftl" encoding="UTF-8">
    <style type='text/css'>
    	.labelx
    	{
    		height: 30px;
    		vertical-align: moddle;
    		padding: 6px 0px 0px 0px;
    		color:#006699;
    	}
    	
    	.labely
    	{
    		height: 30px;
    		text-align: right;
    		vertical-align: moddle;
    		padding: 6px 0px 0px 0px;
    		color:#006699;
    	}
    </style>
    
      <#--合同编号-->
       <#assign contractNos = "">
        <#if contractnoCommands?size!=0>
    	<#list contractnoCommands as contractnoCommand>
    	 <#list contractnoCommand ? keys as key>
    	   <#assign contractNos = contractNos +  '|' +contractnoCommand[key] >
    	 </#list>
    	</#list>
       </#if>
       <#if contractNos?exists  && contractNos?length gt 0>
        <#assign contractNos = '^(' + contractNos?substring(1) + ')$'>
       </#if>
       
    
    
    <table width="100%" cellpadding=0 border="0" cellspacing=0 class="outline">
    	<tr>
    		<td>
    			<div class="tabTit_wrap">
    				<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
    					<tr>
    						<td><h3> ${moduleName}</h3></td>
    						<td align='right'>
    							<input type='button' class='button7' href='?action=download' method='link' value='下载模板' /> 
    							<input type='button' class='button7' value='导入帮助' οnclick="Proxy.openwin('/interface/supplyinfo/importhelp.html')"/> 			
    						</td>
    					</tr>
    				</table>
    			</div>
    		 </td>
    	</tr>
    		
    	<tr height="100%">
    		<td class="workspaces">
    			<div class="workspace" id='workspace'>
    				<table  border="0" cellpadding="0" cellspacing="0" align="center" class="modify" >
    					<tr class='normal'>
    						<td class='labelx' colspan="4" style="text-align: left;">流程:<span style="font-weight: bold;">下载模板</span> - 填写数据  - 上传 - 确认导入</td>
    					</tr>
    					<tr class='normal'>
    						<td class='labelx' colspan="4" style="text-align: left; padding-left: 40px">说明:下载模板后,请不要修改模板格式。一次最多导入100条。上传后会显示数据,可以通过“选择”或“全选”要上传的数据。确认无误后请点击“确认导入”。</td>
    					</tr>
    			      	<#if textmessage??>
    						<tr><td class='labelx' colspan="4" style="text-align: left; padding-left: 40px;color: red;">${textmessage!''}</td></tr>
    			      	</#if>
    			      
    					<tr>
    						<td class="e_tit" colspan="4" align="left">o  上传文件</td>
    					</tr>
    					<form name="valueform" id='valueform' action="?action=upload" enctype="multipart/form-data" method="POST" οnsubmit="return uploadform(this);" >
    						<tr class='normal'>
    							<td class='labely'>上传文件:</td>
    							<td class='context' colspan='3'>
    								<input type="file" name="uploadfile" class="text">
    									<input type="submit" value="上传" class="btnstyle"/>
    							</td>
    						</tr>
    					</form>	
    					<tr>
    						<td class="e_tit" colspan="4" align="left">o  材料供应信息导入</td>
    					</tr>
    				</table>
    				<form name="save_${keyword}" id='save_${keyword}' action="?action=importExcel" method="POST" οnsubmit="return pullback(this);" validate='true' target='save'>
    					<table  border="0" cellpadding="0" cellspacing="0" align="center" class="desking" >
    						<tr node="aa" >
    						   <td colspan='4' style="overflow: auto;" valign="top">
    							   <table  border="0" cellpadding="0" cellspacing="0" align="center"  style="width:98%;height:100%;" class="tab_list" style="border-left: 1px solid #D9D9D9;border-right: 1px solid #D9D9D9;">
    							        <tr class='row1'>
    							            <#--全选操作-->
    							            <td class='cell1' width="5%" >
    							             <input type='checkbox' id='select' name="select" οnclick="checkall();"/>
    							            </td>
    							             <#-- 序号 -->
    								        <td class='cell1' width='5%' >序号</td>
    										
    										<#-- 列表标签 -->
    										<td class='cell1' width='10%' >合同编号</td>
    								        <td class='cell1' width='10%'  >产品类型</td>
    										<td class='cell1' width='10%'  >产品名称</td>
    										<td class='cell1' width='10%'  >其它产品名称</td>
    										<td class='cell1' width='8%'  >品种牌号</td>
    										<td class='cell1' width='8%' >规格型号</td>
    										<td class='cell1' width='8%' >生产批次</td>
    								        <td class='cell1'  width='10%'  >材料发货时间</td>
    										<td class='cell1' width='8%' >供应数量</td>
    										<td class='cell1' width='8%' >计量单位</td>
    
    							            
    							            
    							        </tr>
    									<#if !rowList?exists || rowList?size==0>
    								        <tr class='row7' >
    								            <td colspan="12" class='cell3' align='center'>  数据为空</td>
    								        </tr>
    								    <#else>
    								     <#--隐藏域 获取表头titleMaps-->
    								        <input type="hidden" id="titleMaps" name="titleMaps" value="${titleMaps}"/>
    										<#list rowList as command>
    										  <tr class='row7'  light='true'>
    												<td class='cell3'  align="center">
    													<input type="checkbox" name="sca" value="${command_index}" οnclick="checkone(this)"/>
    												</td>
    									            <td class='cell3'  align="center">${command_index+1}</td>
    									      	 	 <#list rowList[command_index] as cell>
    									      	 	  <#--<#if cell_index == titleMap["其它产品名称"] >
    									      	 	  	<input type="hidden" size='15' class="tdinput" name="${command_index}_${cell_index}" value="${cell}" />
    									      	 	  <#else>-->
    									      	 	   <td class='cell3' >
    									      	 	       <span>${cell}</span>
    										               <input type="hidden" size='15' class="tdinput" name="${command_index}_${cell_index}" value="${cell}" readonly />
    										           </td>
    								            	 </#list>
    									        </tr>
    									        </tr>
    									        
    										</#list>
    									</#if>
    							   </table>
    						   </td>
    						</tr>
    					</table>
    				 
    					<input type="hidden" id='operate_op' name='operate_op' require='false' value="${Session.auth.id!''}" />
    					<input type="hidden" id='operate_name' name='operate_name' require='false' value="${Session.auth.accounts!''}" />
    					<input type="hidden" id='operate_date' name='operate_date' require='false' value="${Sysdate!''}"  />
    				</div>
    			</td>
    		</tr>
     		<tr>    	
    			<td height="30px" align="right" valign="bottom"  >
    				<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
    					<tr>
    						<td width="100%" height="35" align="right" class="tabTit_bottom" >
    							<#if rowList?exists && rowList?size!=0>
    								<input type='submit' class='button7' value='确认导入' /> 
    							</#if>
    					
    						</td>  
    					</tr>
    				</table>
    			</td>
    		</tr>
    	</table>
    </form>
    <div id="lock"></div>
    <div id="loading"></div>
    <#include "/commons/bottom.ftl" encoding="UTF-8">
    <script language="JavaScript" type="text/javascript" > 
        
       	
    	enter('modify');
    
    	<#--全选事件-->
    	function checkall()
    	{
    		var allcheckBoxs = document.getElementsByName("sca") ;
    		if(!document.getElementById("select").checked  ){
    			 for(var i=0;i<allcheckBoxs.length;i++){  
    	           allcheckBoxs[i].checked = false;  
    	        
    	         }  
    			return ;
    		}
    		<#--全选过慢 提示等待-->
    		document.getElementById("loading").innerHTML = "<img src='/themes/skyblue/images/loading.gif' alt=''> 全选中.....";
    		document.getElementById("lock").style.display = "block";
    		document.getElementById("loading").style.display = "block"
    		
    		<#--执行全选-->
    		window.setTimeout(checkallt,500);
    	}
    
    	<#--全选事件 -->
    	function checkallt()
    	{
    		
    		<#--获得多选框总数 作为总行数-->
    		var rowsum = document.getElementsByName("sca");
    		
    		if(rowsum ==null)
    		{	
    			<#--全选结束 隐藏等待-->
    			document.getElementById("lock").style.display = "none";
    			document.getElementById("loading").style.display = "none";	
    			
    			return;
    		}
    		
    		<#--保存有错误的行-->
    		var errorrow = "";
    		
    		if(rowsum!= null && rowsum.length != 0)
    		{
    			nextrow:for(row = 0; row < rowsum.length; row++)
    			{	
    				for(cell = 0; cell < Number(${CELLSUM!'0'}) - 1; cell++)
    				{	
    					<#--行+列是input的name-->
    					var name = row + "_" + cell;
    					var color = document.getElementsByName(name)[0].style.color;
    					
    					<#--如果有错误 跳出 此行-->
    					if(color == "red")
    					{
    						errorrow += "," + (row+1);
    						continue nextrow;
    					}
    				}
    				
    				
    				
    				<#--如果没有跳出 就选中-->
    				rowsum[row].checked = true;
    			
    			}
    		}
    		
    		<#--全选结束 隐藏等待-->
    		document.getElementById("lock").style.display = "none";
    		document.getElementById("loading").style.display = "none";
    		
    		if("" != errorrow){
    			
    		    $("#select").attr("checked",false);
    			alert("第" + errorrow.replace(",","") + "行存在错误数据或必填项未填写,没有选中;\n未选中的行请更改数据后再导入!");
    		}
    	}
    	<#--上传文件表单提交-->
    	function uploadform(_this)
    	{
    		if(_this.uploadfile.value == "")
    		{
    			alert("请先选择上传文件");
    			return false;
    		}
    		//获取文件后缀名
    		var value = _this.uploadfile.value.split(".")[_this.uploadfile.value.split(".").length -1];
    		
    		if(value != "xls" && value != "xlsx")
    		{
    			alert("文件格式错误");
    			return false;
    		}
    		
    		document.getElementById("loading").innerHTML = "<img src='/themes/skyblue/images/loading.gif' alt=''> 导入中....."
    		document.getElementById("lock").style.display = "block";
    		document.getElementById("loading").style.display = "block";		
    		return true;
    	}
       
       
        <#--选中事件-->	
    	function checkone(_this)
    	{
    	  
    		<#--如果选中要取消 不做判断-->
    		if(!(_this.checked))
    		{
    		   
    			return;
    		}
    		 
    		for(cell = 0; cell< Number(${CELLSUM!'0'}) - 1; cell++)
    		{
    			<#--行+列是input的name-->
    			var name = _this.value + "_" + cell;
    			var color = document.getElementsByName(name)[0].style.color;
    			
    			<#--如果有错误 无法选中 返回-->
    			if(color == "red")
    			{
    				_this.checked = false;
    				alert("此行中有错误数据或必填项未填写,请更改后再导入该条数据!");
    				return;
    			}
    		}
    		
    		<#--如果没有返回 就选中-->
    		_this.checked = true;
    		
    	   
    
    		
    	}
    	
    	
    	<#--数据表单提交-->
    	function selfValid()
    	{		
    		<#--获得多选框总数 作为总行数-->
    		var rowsum = document.getElementsByName("sca");
    
    		if(rowsum ==null)
    		{
    			return false;
    		}
    				
    		if(rowsum!= null && rowsum.length != 0)
    		{
    			for(row = 0; row < rowsum.length; row++)
    			{	
    				<#--有一行选中 就可以提交-->
    				if(rowsum[row].checked)
    				{
    					return true;
    				}
    			}
    		}
    		
    		alert("请先选中确定要导入的行");	
    		return false;
    	}
    	
    	$(document).ready(function(){
    		
    		<#--导入成功或失败提示-->
    		if("${actionmessage!''}" != "null" && "${actionmessage!''}" != "")
    				alert("${actionmessage!''}");
    				
    		<#if titleMap?exists && titleMap?size!=0>
    			warningall();
    		</#if>
    	});
    	
    	
    	
    <#if titleMap?exists && titleMap?size!=0>
       <#--错误显示 载入事件-->
    	function warningall(){
    		<#--获得多选框总数 作为总行数-->
    		var rowsum = document.getElementsByName("sca");
    			
    		if(rowsum ==null)
    		   return;	
    		
    		if(rowsum!= null && rowsum.length != 0){
    				for(var row = 0; row < rowsum.length; row++){
    					
    					for(var cell=0; cell < Number(${CELLSUM!'0'})- 1; cell++)
    					{		
    						<#--行+列是input的name-->
    						var name = row + "_" + cell;
    						
    						warning(document.getElementsByName(name)[0],row);
    					}
    				}
    			}
    	}
    	
    	<#-- 非负数-->
    	var regNum = new  RegExp('^[0-9]+(\.[0-9]+)?$');
    	
    	<#-- 粗略日期-->
    	var regDate= new  RegExp('^(19[5-9]|20[0-5])[0-9]-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2][0-9]|3[01])$');
    	
    	<#-- 验证提示 参数是input标签-->
    	function warning(_this,rows)
    	{
    	
    		 <#-- 获得name 得到列 -->
    		 var cellName = _this.name.split("_")[1];	
    		  
    		 var value = _this.value;
    		
    		<#-- 把列转成数字 下面就都根据数字判断 否则根据字符串判断也可以 -->
    		var _cell = parseInt(cellName, 10); 
    				
    		if(value == null)
    			return;
    		
    		<#-- 判断必填项 (判断是去除非必填项)-->
    		if(_cell != ${titleMap["其它产品名称"]!''} && _cell != ${titleMap["品种(牌号)"]!''} && _cell != ${titleMap["产品的规格型号"]!''} && _cell != ${titleMap["生产批次"]!''}  )
    		{
    				if(value == "")
    				{
    					_this.style.color = "red";
    				}
    				else
    				{
    					_this.style.color = "black";
    				}
    		}
    		
    		<#--如果产品类别为[预拌混凝土],产品批次不必填-->	
    	   else if(_cell == ${titleMap['生产批次']!''}){
    	   		<#-- 获得产品类别值 -->
    			var _value = document.getElementsByName(_this.name.split("_")[0] + "_" + ${titleMap["产品类别"]!''})[0].value;
    			
    			if(_value != '预拌混凝土' && value == ""){
    			  
    			  _this.style.color = "red";
    			  
    			}else{
    			
    			  _this.style.color = "black";
    			
    			}
    	   }
    		   
    		 <#--如果产品名称为[抗渗混凝土],牌号必填-->
    		  else if(_cell == ${titleMap['品种(牌号)']!''}){
    			<#-- 获取产品名称值 -->
    			var _value = document.getElementsByName(_this.name.split("_")[0] + "_" + ${titleMap["产品名称"]!''})[0].value;
    			
    			if(_value == '抗渗混凝土' && value ==""){
    				
    				_this.style.color = "red";
    				
    			}else{
    				
    				_this.style.color = "black";
    			
    			}
    				
    		 }
    		 <#--如果产品类别为[预拌混凝土],规格型号必填-->
    		 else if(_cell == ${titleMap['生产批次']!''}){
    			<#-- 获得产品类别值 -->
    			var _value = document.getElementsByName(_this.name.split("_")[0] + "_" + ${titleMap["产品类别"]!''})[0].value;
    			if(_value == '预拌混凝土' && value =="" ){
    			
    			   _this.style.color = "red";
    			
    			}else{
    			
    			  _this.style.color = "black";
    			  
    			}
    			
    		 }
    	
    		<#-- 判断格式错误 -->
    		if(value != "")
    		{
    			<#-- 日期类型 -->
    			if(_cell == ${titleMap["材料发货时间"]!''})
    			{
    				if(!regDate.exec(value))
    					_this.style.color = "red";
    				else
    					_this.style.color = "black";
    			}
    			<#-- 数字类型 -->
    			else if( _cell == ${titleMap["供应数量"]!''} )
    			{
    				if(!regNum.exec(value))
    					_this.style.color = "red";
    				else
    					_this.style.color = "black";
    			}
    		    <#--合同编号是否在合同信息模块中存在-->
    		    else if(_cell == ${titleMap["合同编号"]!''})
    		    {
    
    		       regkeyvalue = new RegExp('${contractNos!''}');
    			   
    			   //校验合同编号在合同管理模块中是否存在
    			    if(!regkeyvalue.exec(value))
    			       _this.style.color = "red";
    				else{
    				   _this.style.color = "black";
    				  
    				}
    		    }else if(_cell == ${titleMap["产品类别"]!''}){
    		    	
    		    	var contractno = document.getElementsByName(rows+"_"+0)[0].value;
    		    	
    		    	//根据合同编号contractno 获取该产品类别value 是否在该合同编号中约定
    				$.ajax({
    					async:false,
    					type:"POST",		
    					url: "/supplyinfo/supplyinfo.action?action=validateProTypeByContractNo",
    					data :{
    						"contract_no":contractno,
    						"product_category":value
    					},
    					success:function(data){
    						if(data == 0)
    							_this.style.color = "red";
    						else
    							_this.style.color = "black";
    					}
    	   		 	});
    			    	
    		    	
    		    }else if(_cell == ${titleMap["产品名称"]!''}){
    		      //获取产品类别
    		      var productType = document.getElementsByName(rows+"_"+1)[0].value;
    
    		      //根据产品类别查询该产品名称是否存在
    			  $.ajax({
    					async:false,
    					type:"POST",		
    					url: "/supplyinfo/supplyinfo.action?action=validateSonNameBySuperName",
    					data :{
    						"super_name":productType,
    						"child_name":value,
    						"col_type":0
    					},
    					success:function(data){
    						if(data == 0)
    							_this.style.color = "red";
    						else
    							_this.style.color = "black";
    					}
    	   		 	});
    		      
    		    }else if(_cell == ${titleMap["产品的规格型号"]!''}){
    		      //获取产品名称
    		      var productName = document.getElementsByName(rows+"_"+2)[0].value;
    		      
    		      //产品名称 查询该产品的规格型号是否存在
    		      if( productName!=null ){
    		      	$.ajax({
    					async:false,
    					type:"POST",		
    					url: "/supplyinfo/supplyinfo.action?action=validateSonNameBySuperName",
    					data :{
    						"super_name":productName,
    						"child_name":value,
    						"col_type":2
    					},
    					success:function(data){
    						if(data == 0)
    							_this.style.color = "red";
    						else
    							_this.style.color = "black";
    					}
    	   		 	});
    		      	
    		      }
    		    }else if(_cell == ${titleMap["品种(牌号)"]!''}){
    		      
    		     
    		      //获取产品名称
    		      var productName = document.getElementsByName(rows+"_"+2)[0].value;
    		      
    		      if( productName!=null && _cell == '无'){
    		        //产品名称 查询该品种牌号是否存在
    		        $.ajax({
    					async:false,
    					type:"POST",		
    					url: "/supplyinfo/supplyinfo.action?action=validateSonNameBySuperName",
    					data :{
    						"super_name":productName,
    						"child_name":value,
    						"col_type":1
    					},
    					success:function(data){
    						if(data == 0)
    							_this.style.color = "red";
    						else
    							_this.style.color = "black";
    					}
    	   		 	});
    		      }
    		      
    		    }else if(_cell == ${titleMap["其它产品名称"]!''}){
    		    	//产品类别
    		    	var productType = document.getElementsByName(rows+"_"+1)[0].value;
    		    	//获取产品名称
    		       var productName = document.getElementsByName(rows+"_"+2)[0].value;
    		      
    		       if(productType=='建筑外窗' && productName == '其它' ){
    		       	  //alert(value);
    		       	  //判断当其它产品名称不在企业表产品信息中存在
    		       	   $.ajax({
    					async:false,
    					type:"POST",		
    					url: "/supplyinfo/supplyinfo.action?action=validateSonNameBySuperName",
    					data :{
    						
    						"child_name":value,
    						"col_type":-1
    					},
    					success:function(data){
    						if(data == 0)
    							_this.style.color = "red";
    						else
    							_this.style.color = "black";
    					}
    	   		 	});
    		       }	
    		    }
    	   }
    	
    	
    	
    	}
    </#if>	
    	<#--反全选-->
    	$('input[name=sca]').click(function(){
    		var ckslength = $('input[name=sca]').length;
    		if(!$(this)[0].checked){
    			$('#select')[0].checked = false;
    		}else if($(this)[0].checked){
    			if($('input[name=sca]:checked').length == ckslength){
    				$('#select')[0].checked = true;
    			}
    		}
    	});
    </script>

    Java代码

    /**
    	 * 执行上传操作
    	 * @param access
    	 * @param request
    	 * @param response
    	 * @return
    	 * @throws Wrong
    	 */
    	
    	public ModelAndView upload(Access access, HttpServletRequest request,
    			HttpServletResponse response) throws Wrong {
    
    		ModelAndView view = new ModelAndView(
    				"/interface/supplyinfo/supplyinfo_excel");
    		// 页面显示提示
    		String textmessage = "";
    		
    		// 总行数
    		int ROWSUM = 104; // 106;
    		// 总列数
    		int CELLSUM = 11;
    
    		// 数据开始行
    		int DATACOUNT = 5;
    
    		// 日期格式
    		DateFormat mat = new SimpleDateFormat("yyyy-MM-dd");
    
    		// 存放excel所有数据
    		List<List<String>> rowList = new ArrayList<List<String>>(20);
    
    		// 存放excel所有标题位置 key标题名字 value是列位置(从0算起)
    		Map<String, Integer> titleMap = new HashMap<String, Integer>(33);
    
    		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    
    		CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
    				.getFile("uploadfile");
    
    		if (file.getSize() != 0) {
    			// 获得文件名:
    			String realFileName = file.getOriginalFilename();
    			InputStream fileis = null;
    			try {
    				// 存放路径
    				StringBuffer upLoadFilePath = new StringBuffer();
    				upLoadFilePath
    						.append(getServletContext().getRealPath("/document"))
    						.append(File.separator).append("supplyupload")
    						.append(File.separator);
    
    				// 创建路径目录
    				File tempFilePath = new File(upLoadFilePath.toString());
    				if (!tempFilePath.exists()) {
    					tempFilePath.mkdir();
    				}
    
    				Date date = new Date();
    				String time = mat.format(date);
    
    				// 保存 文件名= 路径 + 当前时间 + 上传文件的后缀名(防止路径中有多个. 获取数组最后一个)
    				File upLoadFile = new File(
    						upLoadFilePath.toString()
    								+ time
    								+ "_"
    								+ System.currentTimeMillis()
    								+ "."
    								+ realFileName.split("\\.")[realFileName
    										.split("\\.").length - 1]);
    				FileCopyUtils.copy(file.getBytes(), upLoadFile);
    
    				// 重新获得文件流
    				fileis = new FileInputStream(upLoadFile);
    
    				Workbook wb = new HSSFWorkbook(fileis);
    				Sheet sheet = wb.getSheetAt(0);
    
    				// 遍历行数
    				for (int rowCount = 1; rowCount <= sheet.getLastRowNum(); rowCount++) {
    					// 获得行 从0行开始
    					Row row = sheet.getRow(rowCount - 1);
    					
    					if(row.getRowNum()  == 1){
    						//判断row=1时 材料供应信息表
    						Cell titlecell = row.getCell(0);
    						if(!"材料供应信息表".equals(titlecell.getRichStringCellValue()
    								.toString())){
    							//判断表头是否为[材料供应信息表]
    							textmessage = "模板不正确。请重新下载模板";
    							break;
    						}
    					}
    					
    					
    					// 是数据行
    					if (rowCount >= DATACOUNT && rowCount <= ROWSUM) {
    						// 保存列数据
    						List<String> cellList = new ArrayList<String>(11);
    
    						// 遍历列数 不超过CELLSUM最大列
    						for (int cellCount = 1; cellCount <= sheet
    								.getLastRowNum() && cellCount <= CELLSUM; cellCount++) {
    							// 获得列 从0行开始
    							Cell cell = row.getCell(cellCount - 1);
    
    							if (cellCount == 1 || cell == null)
    								continue;
    
    							switch (cell.getCellType()) {
    
    							case Cell.CELL_TYPE_NUMERIC:
    								// 先看是否是日期格式
    								if (DateUtil.isCellDateFormatted(cell)) {
    									// 读取日期格式
    									String celldate = mat.format(
    											cell.getDateCellValue()).trim();
    									cellList.add(celldate);
    								} else {
    									// 读取数字
    									cellList.add(String.valueOf(
    											cell.getNumericCellValue()).trim());
    								}
    
    								break;
    
    							case Cell.CELL_TYPE_STRING:
    								// 读取String
    								cellList.add(cell.getRichStringCellValue()
    										.toString().trim());
    								break;
    
    							case Cell.CELL_TYPE_BLANK:
    								cellList.add("");
    								break;
    
    							}
    
    						}
    
    						// 如果cellList不是空 且内容不都是""
    						if (!cellList.isEmpty()) {
    							for (String value : cellList) {
    								if (!"".equals(value)) {
    									// 保存到行集合
    									rowList.add(cellList);
    
    									break;
    								}
    							}
    						}
    
    					} else if(rowCount == 3 && titleMap.size() < CELLSUM - 1){
    						// 添加列标题 如果titleMap没有添加过的话
    						for (int cellCount = 1; cellCount <= sheet.getLastRowNum() && cellCount <= CELLSUM; cellCount++){
    							// 获得列 从0行开始
    							Cell cell = row.getCell(cellCount - 1);
    
    							if (cellCount == 1 || cell == null)
    								continue;
    							// 以标题名为key 位置为value(从0开始)
    							titleMap.put(cell.getRichStringCellValue().toString(), cellCount - 2);
    						}
    					}
    
    				}
    				
    				Map<String,Object> enterpriseInfo =  this.getEnterpriseInfo(access, request, response);
    				
    				//获取企业id
    				Integer enterpriseId = 0 ;
    				
    				if(enterpriseInfo!=null &&enterpriseInfo.size()>0){
    					enterpriseId = (Integer)enterpriseInfo.get("enterpriseId");
    				}
    				
    				//获取合同编号
    				List<Map<String, String>> contractnoCommands = access.query(new Declare("contractInfo.select_contractno").AND("enterprise_id = ?", enterpriseId));
    				
    				view.addObject("textmessage", textmessage);
    				view.addObject("contractnoCommands",contractnoCommands);
    				view.addObject("titleMap",titleMap);
    				view.addObject("titleMaps",titleMap.toString());
    				view.addObject("rowList", rowList);
    				view.addObject("CELLSUM", CELLSUM);
    			}catch (Exception e) {
    				
    				e.printStackTrace();
    			
    			}finally{
    				try{
    					fileis.close();
    				}
    				catch (Exception e){
    					e.printStackTrace();
    				}
    			
    			}
    
    		}
    
    		return view;
    	}

    /**
    	 * 执行导入Excel操作
    	 * */
    	
    	public ModelAndView importExcel(Access access, HttpServletRequest request,
    			HttpServletResponse response) throws Wrong {
    
    		ModelAndView view = new ModelAndView("commons/reload");
    
    		String actionmessage = "导入成功";
    
    		try {
    			
    			String titleMaps = Web.value(request, "titleMaps");
    
    			Map<String, Integer>  titleMap = (Map<String, Integer> )JSONObject.toBean(JSONObject.fromObject(titleMaps),HashMap.class);
    			
    			//获取登录用户类型
    			Integer userType= Web.auth(request).getType();
    
    			//获取登录人id
    			Integer userId= Web.auth(request).getId();
    			
    			//企业组织机构代码
    			String unitOrgan = "";
    			
    			if(userType == 10 ){//企业分帐号
    				//根据企业分账号查询主企业的组织机构代码
    
    				//获取主企业信息
    				Map<String,Object> mainUnitInfo = access.info3(new Declare("contractInfo.select_mainunit_info").value(userId));
    				
    				if(mainUnitInfo!=null && mainUnitInfo.size()>0 ){
    					
    					//获取组织机构代码
    					unitOrgan =(String) mainUnitInfo.get("com_id");
    					
    				}
    			}else{//主企业登录 该功能只有企业才有添加功能
    
    				//获取当前用户企业组织机构代码
    				unitOrgan = Web.auth(request).getAccount();
    			}
    			
    			//根据企业组织机构代码企业id
    			Integer enterpriseId= access.first(new Declare("contractInfo.select_enterprise_id").value(unitOrgan));
    			//获取当前人id
    			Integer operateOp = Web.auth(request).getId();
    			
    			//当前操作人name
    			String operateName =Web.auth(request).getName();
    			
    			// 存放所有字段 key是中文名 value是数据库字段名
    			Map<String, String> filedsMap = Alert.map("合同编号:contract_no,产品类别:product_category,产品名称:product_name,其它产品名称:other_product_name,品种(牌号):variety,产品的规格型号:product_standard,生产批次:product_batch,材料发货时间:approach_date,供应数量:supply_number,计量单位:product_unit");
    			
    			//产品类别从配置文件combox.properties读取
    			Map<String, String> productTypeMap = new HashMap<String, String>();
    			Map<String, String> tempMap = Mix.get().value("productTypeMap", Symbol.Combox);
    			for (String key : tempMap.keySet())
    			{
    				productTypeMap.put(tempMap.get(key), key);
    			}
    			
    			// Excel 中需要导入导入的行
    			String[] check = Web.values(request, "sca");
    
    			// 拦截所有异常 任何异常导入失败
    			try {
    				for (String row : check) {
    					
    					StringBuffer sqlfileds = new StringBuffer("");
    					StringBuffer sqlvalues = new StringBuffer("");
    					Integer contractId = 0 ;
    					
    					if (titleMap!=null && titleMap.keySet().size() == 0) {
    						throw new Exception("读取表格列失败");
    					}
    
    					for (String title : titleMap.keySet()) {
    						// 获得列位置
    						int cell = titleMap.get(title);
    
    						// 行+列 是input的name
    						String name = row + "_" + cell;
    						// 获取值
    						String value = request.getParameter(name);
    
    						if (value != null && !"".equals(value)) {
    
    							// 添加第cell个字段
    							sqlfileds.append(filedsMap.get(title)).append(",");
    
    							// 日期类型
    							if (cell == titleMap.get("材料发货时间")) {
    								sqlvalues.append("to_date('").append(value)
    										.append("','yyyy-mm-dd'),");
    							}
    							// 数字类型
    							else if (cell == titleMap.get("供应数量")) {
    								sqlvalues.append(Double.valueOf(value)).append(
    										",");
    							}
    							// 产品类别存储对应的key
    							else if (cell == titleMap.get("产品类别")) {
    								sqlvalues
    										.append(Alert.number(productTypeMap
    												.get(value))).append(",");
    							}else if(cell == titleMap.get("合同编号")){
    								
    								sqlvalues.append("'").append(value).append("',");
    								
    								//根据合同编号查询合同表id
    								contractId =access.first(new Declare("contractInfo.select_contractid").value(value));
    								
    							}else {
    								sqlvalues.append("'").append(value).append("',");
    							}
    							
    						}
    
    					}
    					//每条进行进行保存
    					if(sqlfileds!=null && sqlfileds.length()>0 && sqlvalues!=null && sqlvalues.length()>0){
    						
    						Serializable id = access.append(new Declare("supplyInfo.import_supplyinfo")
    														  .attr("titles", sqlfileds.substring(0,sqlfileds.length()-1))
    														  .attr("values", sqlvalues.substring(0,sqlvalues.length()-1))
    																.values(enterpriseId,contractId, operateOp, operateName)
    														);
    						
    						//-----------计入历史记录表---------|
    						
    						//定义存储历史表字段
    						String tableName = this.getEntity().tableName().toUpperCase();//表名
    						
    						int type = 4;//[1:添加,2:修改,3:删除,4:Excel导入]
    						
    						//插入历史数据
    						Bemms.history(access, id, Web.auth(request), tableName, type);
    						
    						//-----------计入历史记录表---------|
    					}
    					
    				}
    
    			} catch (Exception e) {
    				actionmessage = "导入失败,请检查您填写的数据后再重试";
    				
    				e.printStackTrace();
    				//事务回滚
    				access.rollback();
    			}
    		} catch (Throwable e) {
    			throw this.undoErrorMimic(e, this.getMethodLableName("save"));
    		}
    		view.addObject("actionmessage",actionmessage);
    		view.addObject("reload", "/supplyinfo/supplyinfo.action?action=excel&actionmessage="+actionmessage);
    		return view;
    	}

    展示效果:

    Excel模版:(Excel的操作行列是从B5到K104)



    进入导入页面:


    选择一个正确的文件,点击上传,执行的方法(upload),显示数据,确认导入执行的方法是(importExcel)


    展开全文
  • 微信小程序开发交流qq群 173683895 承接微信小程序开发。...2. 在服务器写一个html,实现表单上传文件 3.后端php接收文件并存到一个服务器文件夹,把文件名存到数据库以后检索用 4.在微信小程序创建一个页面...

    微信小程序开发交流qq群   173683895

       承接微信小程序开发。扫码加微信。

    正文:

    目前小程序没有能实现此功能的 API 所以我这里通过使用 web-view 实现;

    实现流程:

    1. 在小程序后台配置业务域名

    2. 在服务器写一个html,实现表单上传文件

    3.后端php接收文件并存到一个服务器文件夹,把文件名存到数据库以后检索用

    4.在微信小程序创建一个页面,里面使用web-view达到上传文件的目的;

    效果图:

    具体实现:

    1. 在小程序后台配置业务域名

    地址:https://mp.weixin.qq.com/wxopen/appdatacount

    2. 在服务器写一个html,实现表单上传文件

    index.html文件

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
    		<meta charset="UTF-8">
    		<title>Title</title>
    		<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
    	</head>
    
    	<body>
    		<form id="form1" action="https://dwb.lynncain.cn/H5/up_file.php" target="frame1" method="post" enctype="multipart/form-data">
    			<input type="file" name="file">
    			<input type="button" value="上传" onclick="upload()">
    		</form>
    		<iframe name="frame1" frameborder="0" height="40"></iframe>
    		<!-- 其实我们可以把iframe标签隐藏掉 -->
    		<script type="text/javascript">
    			function upload() {
    				$("#form1").submit();
    				var t = setInterval(function() {
    					//获取iframe标签里body元素里的文字。即服务器响应过来的"上传成功"或"上传失败"
    					var word = $("iframe[name='frame1']").contents().find("body").text();
    					if(word != "") {
    //						alert(word); //弹窗提示是否上传成功
    //						clearInterval(t); //清除定时器
    					}
    				}, 1000);
    			}
    		</script>
    	</body>
    
    </html>

     

    3.后端php接收文件并存到一个服务器文件夹,把文件名存到数据库以后检索用

    up_file.php 文件:

    <?php  
        header("Content-Type:text/html;charset=utf8"); 
    	header("Access-Control-Allow-Origin: *"); //解决跨域
    	header('Access-Control-Allow-Methods:POST');// 响应类型  
    	header('Access-Control-Allow-Headers:*'); // 响应头设置 
        $link=mysql_connect("localhost","root","root"); 
        mysql_select_db("new_test", $link); //选择数据库
        mysql_query("SET NAMES utf8");//解决中文乱码问题
    	error_reporting(0);
    	if ($_FILES["file"]["error"] > 0)  
    	  {  
    	  echo "错误: " . $_FILES["file"]["error"] . "<br />";  
    	  }  
    	else  
    	  {  
    		$dlog["name"]=$_FILES["file"]["name"];
      		$dlogs=$dlog;	
        	//echo urldecode(json_encode($dlogs));
    		$name =$_FILES["file"]["name"];
    		echo '上传成功!';
    		echo $name;
    			//插入数据到数据库 
    			$strsql = "insert into name (fileName) values('$name')";
    			//mysql_query() 函数执行一条 MySQL 查询。SELECT,SHOW,EXPLAIN 或 DESCRIBE 都需要用这个函数执行
    			$result = @mysql_query($strsql);
    //	  echo "文件名: " . $_FILES["file"]["name"] . "<br />";  
    //	  echo "类型: " . $_FILES["file"]["type"] . "<br />";  
    //	  echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";   
    	  }  
    	 if (file_exists("upload/" . $_FILES["file"]["name"]))  
    	    {  
    //	      echo $_FILES["file"]["name"] . " 文件已经存在. ";  
    	    }  
    	else  
    	    {  
    	      move_uploaded_file($_FILES["file"]["tmp_name"],  
    	      "upload/" . $_FILES["file"]["name"]);  
    //	      echo "文件已经被存储到: " . "upload/" . $_FILES["file"]["name"];  
    	    }   
    ?>   

    4.在微信小程序创建一个页面,里面使用web-view达到上传文件的目的;

    web.wxml文件

    <!--pages/web/web.wxml-->
     <web-view src='https://dwb.lynncain.cn/H5/'></web-view> 

    注:微信小程序web-view标签使用如上,无需多余代码。

     

     

     

     

     

     

    展开全文
  • input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick"> <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter=...
    <template>
      <div>
        <input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick">
        <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover">
          Drop excel file here or
          <el-button :loading="loading" style="margin-left:16px;" size="mini" type="primary" @click="handleUpload">
            Browse
          </el-button>
        </div>
      </div>
    </template>
    
    <script>
    import XLSX from 'xlsx'
    
    export default {
      props: {
        beforeUpload: Function, // eslint-disable-line
        onSuccess: Function// eslint-disable-line
      },
      data() {
        return {
          loading: false,
          excelData: {
            header: null,
            results: null
          }
        }
      },
      methods: {
        generateData({ header, results }) {
          this.excelData.header = header
          this.excelData.results = results
          this.onSuccess && this.onSuccess(this.excelData)
        },
        handleDrop(e) {
          e.stopPropagation()
          e.preventDefault()
          if (this.loading) return
          const files = e.dataTransfer.files
          if (files.length !== 1) {
            this.$message.error('Only support uploading one file!')
            return
          }
          const rawFile = files[0] // only use files[0]
    
          if (!this.isExcel(rawFile)) {
            this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files')
            return false
          }
          this.upload(rawFile)
          e.stopPropagation()
          e.preventDefault()
        },
        handleDragover(e) {
          e.stopPropagation()
          e.preventDefault()
          e.dataTransfer.dropEffect = 'copy'
        },
        handleUpload() {
          this.$refs['excel-upload-input'].click()
        },
        handleClick(e) {
          const files = e.target.files
          const rawFile = files[0] // only use files[0]
          if (!rawFile) return
          this.upload(rawFile)
        },
        upload(rawFile) {
          this.$refs['excel-upload-input'].value = null // fix can't select the same excel
    
          if (!this.beforeUpload) {
            this.readerData(rawFile)
            return
          }
          const before = this.beforeUpload(rawFile)
          if (before) {
            this.readerData(rawFile)
          }
        },
        readerData(rawFile) {
          this.loading = true
          return new Promise((resolve, reject) => {
            const reader = new FileReader()
            reader.onload = e => {
              const data = e.target.result
              const workbook = XLSX.read(data, { type: 'array' })
              const firstSheetName = workbook.SheetNames[0]
              const worksheet = workbook.Sheets[firstSheetName]
              const header = this.getHeaderRow(worksheet)
              const results = XLSX.utils.sheet_to_json(worksheet)
              this.generateData({ header, results })
              this.loading = false
              resolve()
            }
            reader.readAsArrayBuffer(rawFile)
          })
        },
        getHeaderRow(sheet) {
          const headers = []
          const range = XLSX.utils.decode_range(sheet['!ref'])
          let C
          const R = range.s.r
          /* start in the first row */
          for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
            const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
            /* find the cell in the first row */
            let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
            if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
            headers.push(hdr)
          }
          return headers
        },
        isExcel(file) {
          return /\.(xlsx|xls|csv)$/.test(file.name)
        }
      }
    }
    </script>
    
    <style scoped>
    .excel-upload-input{
      display: none;
      z-index: -9999;
    }
    .drop{
      border: 2px dashed #bbb;
      width: 600px;
      height: 160px;
      line-height: 160px;
      margin: 0 auto;
      font-size: 24px;
      border-radius: 5px;
      text-align: center;
      color: #bbb;
      position: relative;
    }
    </style>
    
    <template>
      <div class="app-container">
        <upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" />
        <el-table :data="tableData" border highlight-current-row style="width: 100%;margin-top:20px;">
          <el-table-column v-for="item of tableHeader" :key="item" :prop="item" :label="item" />
        </el-table>
      </div>
    </template>
    
    <script>
    import UploadExcelComponent from '@/components/UploadExcel/index.vue'
    
    export default {
      name: 'UploadExcel',
      components: { UploadExcelComponent },
      data() {
        return {
          tableData: [],
          tableHeader: []
        }
      },
      methods: {
        beforeUpload(file) {
          const isLt1M = file.size / 1024 / 1024 < 1
    
          if (isLt1M) {
            return true
          }
    
          this.$message({
            message: 'Please do not upload files larger than 1m in size.',
            type: 'warning'
          })
          return false
        },
        handleSuccess({ results, header }) {
          this.tableData = results
          this.tableHeader = header
        }
      }
    }
    </script>
    
    展开全文
  • 上传Excel

    千次阅读 2013-07-26 09:49:47
    那么上传Excel的本质是将每一条Excel数据固定格式后,将每一个cell作为一条数据的对应元素存起来 a)程序效果图 b)excel中的格式(让用户明白) c)上传的数据 d)根据上传文件给出用户错误提示 前台代码

    对于数据量小的表进行增加,可以一条条增加,但是对于大数据往往希望可以从存满数据的Excel表中向数据库中倒入数据,这无疑是节约人力物力。那么上传Excel的本质是将每一条Excel数据固定格式后,将每一个cell作为一条数据的对应元素存起来

    a)程序效果图

    b)excel中的格式(让用户明白)

    c)上传的数据

    d)根据上传文件给出用户错误提示

    前台代码

    1)界面

    // 定义档案编辑页面
    Ext.define('STAFF.view.StaffExcel', {
        extend: 'Ext.window.Window',
        alias : 'widget.staffexcel',	
        layout:'fit',
        modal:true,
        title:'员工导入Excel界面',
         width:650,
        height:400,
    //  maximized:true,
        border:0,
        autoShow: true, 
        constrain: true,
        parentPage:null,
        parentData:null,
        
    	//编辑窗口的构造函数
        constructor: function(config) {
    	    var me = this;
    	    // 缓存parentPage属性
    	    me.parentPage = config.parentPage;
    	    // 参数设为数组或对象,那种方式有效使用那种方式,暂不清楚适用情况,更具wakecombo组件得出的经验
    	    me.callParent([config]);
    	},
    	
    		initComponent : function() {// 初始化组件
    		var me = this;
    		me.items = [me.createExcelForm()];
    		me.callParent();
    	},
       
     createExcelForm : function() {
    		var me = this;
    		me.excelForm = Ext.create('Ext.form.Panel', {
    			id : "uploadForm",
    			width : 500,
    			bodyPadding : '10 10 0',
    			autoScroll : true,
    			defaults : {
    				anchor : '100%',
    				allowBlank : false,
    				msgTarget : 'side',
    				labelWidth : 50
    			},
    
    			items : [{
    				xtype : 'filefield',
    				id : 'form_file',
    				emptyText : '选择一个文件',
    				fieldLabel : '文件',
    				name : 'filePath',
    				allowBlank : false,
    				buttonText : '选择..'
    			},{
    				xtype:'displayfield'
    				,id:'staffExcelErrorMsg'
    				,height:100
    				,style:'border-top:1px solid #99bce8'
    			}],
    			buttons : [{
    				text : '上传',
    				id : "excelUpload"
    			}, {
    				text : '清空',
    				handler : function() {
    					this.up('form').getForm().reset();
    				}
    			}]
    		});
    		return me.excelForm;
    	}
    
    });
    


    2)

    /**
    	 * 导入Excel 
    	 */
    	indexExcel : function() {
    		// 弹出界面对象建立
    		excelWin = Ext.widget('staffexcel', {
    					parentPage : ctrl
    				});
    		excelWin.on({
    					beforeclose : function(winSelf) {// 表格弹窗的关闭事件
    						ctrl.selectQuery();
    					}
    				});
    	},
    	  
    	excelUpload : function() {
    		var form = Ext.getCmp('excelUpload').up('form').getForm();
    		if (form.isValid()) {
    			form.submit({
    				url : restPath + path + 'uploadExcel',
    				waitMsg : '正在上传文件...',
    				success : function(form, action) {
    					var errMsg = "<b>文件上传成功:</b><br>";
    					Ext.getCmp("staffExcelErrorMsg").setValue(errMsg+"导入Excel成功");
    				},
    				failure : function(form, action) {
    					var errMsg = "<b>文件上传出错:</b><br>";
    					var errArr = action.result.result.split('请检查');
    					var resultErr = "" ;
    					for (var i = 0; i < errArr.length; i++) {
    						var err = errArr[i];
    						resultErr = resultErr + err +"<br>";
    					}
    					Ext.getCmp("staffExcelErrorMsg").setValue(errMsg+resultErr);
    				}
    			});
    		}
    	},


    3)

    /**
      	 * 上传Excel 
      	 * @throws Exception 
      	 */
    	@POST
    	@Consumes(MediaType.MULTIPART_FORM_DATA)
    	/* 此处必须设置为TXT_HTML,否则ExtJS前台不能获得正确的返回 */
    	@Produces("text/html;charset=utf-8")
    	@Path(value = "uploadExcel")
    	public String loadFile(@Context HttpServletRequest request) throws Exception {
    		// 输出日志
    		LogHelper.log(StaffCtrl.class, LogHelper.INFO, ACTION_NAME + "上传Excel" + START);
    		UploadResponse res = new UploadResponse();
    
    
    			//获取当前路径
    			String tmpDir = System.getProperty("java.io.tmpdir");
    			//最大数据量
    			final int permitedSize = 3 * 1024 * 1024;
    			MultipartRequestWrapper multipartRequest = new MultipartRequestWrapper(request, tmpDir, permitedSize, "UTF-8");
    
    
    			//获取文件(主要是文件路径)
    			File fileIn = multipartRequest.getFile("filePath");
    			//将文件包装成输入流
    			InputStream is = new FileInputStream(fileIn);
    			//返回数据列表(RowData类型列表信息)
    			List<RowData> dates = ExcelHelper.read(new ArchivesExcelResolver(), is);
    			//对excel内的(RowData类型列表信息)进行操作
    			String errMsg  = staffService.uploadExcelDatas(dates);
    			if("".equals(errMsg)){
    				res.setSuccess(true);
    				res.setResult("success");
    			}else {
    				res.setSuccess(false);
    				res.setResult(errMsg);
    			}
    		LogHelper.log(StaffCtrl.class, LogHelper.INFO, ACTION_NAME + "上传Excel" + END);
    		ObjectMapper ob = new ObjectMapper();
    		String resStr = ob.writeValueAsString(res);
    		return resStr;
    	}
    
    
    }


    4)ExcelHelper

    package com.beiyanght.ifks.main.business.upload.utils;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.wakeframework.common.exception.BusinessException;
    import org.wakeframework.extend.excel.ExcelResolver;
    import org.wakeframework.extend.excel.RowData;
    /**
     * Excel助手(用来将excel的数据解析到RowData列表中)
     * @author 
     *
     */
    public final class ExcelHelper {
    	  public static <T> List<RowData> read(ExcelResolver<T> resolver, InputStream inputStream)
    	    throws IOException, BusinessException
    	  {
    		//获取一个Excel文件
    	    HSSFWorkbook book = new HSSFWorkbook(inputStream);
    	    //获取一个Sheet表单
    	    Sheet sheet = book.getSheetAt(resolver.getSheetNum());
    	    //将Sheet表单解析成RowData列表
    	    List datas = readData(sheet, resolver);
    	    //返回列表
    	    return datas;
    	  }
    	  /**
    	   * 将Sheet表单解析成RowData列表
    	   * @param sheet表单
    	   * @param resolver解析器
    	   * @return
    	   */
    	  public static List<RowData> readData(Sheet sheet, ExcelResolver<?> resolver) {
    	    List<RowData> data = new ArrayList<RowData>();
    	    for (Iterator localIterator1 = sheet.iterator(); localIterator1.hasNext(); ) { 
    	    	//单元格
    	    	Cell cell;
    	    	//获取一行数据
    		    Row row = (Row)localIterator1.next();
    		    RowData cd = new RowData();
    
    
    	      for (Iterator localIterator2 = row.iterator(); localIterator2.hasNext(); ) { cell = (Cell)localIterator2.next();
    	        switch (cell.getCellType())
    	        {
    	        //单元格为string类型put(key,value)
    	        case 1:
    	          cd.put(Integer.valueOf(cell.getColumnIndex()), cell.getStringCellValue());
    	          break;
    	        //单元格为boolean类型
    	        case 4:
    	          cd.put(Integer.valueOf(cell.getColumnIndex()), Boolean.valueOf(cell.getBooleanCellValue()));
    	          break;
    	        //单元格为double类型
    	        case 0:
    	          cd.put(Integer.valueOf(cell.getColumnIndex()), Double.valueOf(cell.getNumericCellValue()));
    	        case 2:
    	        case 3:
    	        }
    	      }
    	      //向RowData对象中插入行号
    	      cd.setRowNum(row.getRowNum());
    	    //向RowData对象中插入cell数目
    	      cd.setCellCount(cd.getData().size());
    	      //向List<RowData>对象data中插入RowData数据cd
    	      data.add(cd);
    	    
    	    }
    	    //去掉第一行标题行
    	    if(null != data && data.size() != 0){
    	    	 data.remove(0);
    	    }
    	    //返回
    	    return data;
    	  }
    	}

    5)后台校验

    /**
    	 * 上传excel信息
    	 * @param dates解析到的excel列表信息
    	 * @return 存储完毕的人员信息
    	 * @throws Exception 
    	 */
    	@Override
    	public String uploadExcelDatas(List<RowData> dates) throws Exception {
    		List<Staff> resustList = new ArrayList<Staff>();
    		//检查符合要求的数据列表
    		List<RowData> checkData = new ArrayList<RowData>();
    		//错误列表
    		List<String> error = new ArrayList<String>();
    		//返回的错误字符串
    		String returnErr = "";
    		//逐行检查列表信息,合格加入合格列表,不合格将错误信息加入错误列表
    		for(RowData data:dates){
    			String errMsg = check(data);
    		    if ("".equals(errMsg)){
    				checkData.add(data);
    		    }else {
    		    	 error.add(errMsg);
    			}
    	}
    		//新增合格列表中的数据
    		for(RowData data:checkData){
    			try {	
    				//建一条staff信息
    				Staff staff = builder(data);
    				if(null != staff){
    					resustList.add(staff);
    				}
    				
    			} catch (Exception e) {
    				error.add(e.getMessage());
    			}
    		
    		}
    		//拼接错误列表中的错误信息
    		if ((error != null) && (!(error.isEmpty()))) {
    			  StringBuilder errorString = new StringBuilder();
    			  for(String e:error){
    				  errorString.append(e + "\n");
    			  }
    			  returnErr = errorString.toString();
    		}
    		//返回错误信息
    		return returnErr;
    	}
    	/**
    	 * 检查每条excel信息是否符合要求
    	 * @param data
    	 * @return
    	 * @throws BusinessException
    	 */
    	private String check(RowData data) throws BusinessException {
    		String returnErr = "";
    		if (data.getRowNum() > 0 && data.getCellCount() <=  5) {
    			/*检查数据如果数据有问题则抛出异常,终止解析*/
    			String errMsg ="";
    				Boolean returnFlag = true;
    				
    				//人员编号0
    				if(null == data.getString(0)){
    					errMsg  = errMsg + " 人员编号|";
    					returnFlag = false;
    				}
    				
    				//姓名1
    				if(null == data.getString(1)){
    					errMsg  = errMsg + " 姓名|";
    					returnFlag = false;
    				}
    				
    				//性别2
    				Sex sex = null;
    				if(null != data.getString(2)){
    					sex = Sex.getMatchByName(data.getString(2));
    				}
    				if(null == data.getString(2) || null == sex ){
    					errMsg  = errMsg + " 性别|";
    					returnFlag = false;
    				}
    				
    				//分类3
    				List<StaffType> staffTypeList = null;
    				if(null != data.getString(3)){
    					staffTypeList = StaffType.findByStaffTypeNameInExcel(data.getString(3), EnableOrDisable.ENABLE);
    				}
    				if(null == data.getString(3) || null == staffTypeList || staffTypeList.size() == 0){
    					errMsg  = errMsg + " 分类|";
    					returnFlag = false;
    				}
    				data.getString(3);
    				
    				//备注4
    				data.getString(4);
    				
    				
    				if(!returnFlag){
    					if(null != data.getString(1)){
    						returnErr = "第 \'" + data.getRowNum() + "\' 行数据 : 人员为 \'"+data.getString(1)+"\' 的数据"+errMsg+"不符合规范请检查";
    					}else{
    						returnErr = "第 \'" + data.getRowNum() + "\' 行 \'未填写人员名称\' 的数据:"+errMsg+"不符合规范请检查";
    					}
    					
    					return returnErr;
    				}else{
    					return returnErr;
    				}
    			}
    	 else {//如果本行数据不等于三列那么将忽略,如果不想忽略则应该抛出BusinessException
    			if(null != data.getString(1)){
    				returnErr = "第 \'" + data.getRowNum() + "\' 行数据 : 人员名称为 \'"+data.getString(1)+"\' 的数据列数不符请检查";
    			}else{
    				returnErr = "第 \'" + data.getRowNum() + "\' 行 \'未填写人员名称\' 的数据:列数不符请检查";
    			}
    			return returnErr;
    			
    		}
    	}
    	
    	/**
    	 * 构建staff信息
    	 * @param data合格数据
    	 * @return
    	 * @throws BusinessException
    	 */
    	private Staff builder(RowData data) throws BusinessException {
    		Staff staff = new Staff();
    		try {
    			//如果唯一性校验失败返回
    			if(!Staff.uniqueCheckInExcel(data.getString(1))){
    				return null;
    			}
    			//人员编码
    			staff.setStaffCode(data.getString(0));
    			//姓名
    			staff.setName(data.getString(1));
    			//性别
    			Sex sex = Sex.getMatchByName(data.getString(2));
    			if(null != sex){
    				staff.setSex(sex);
    			}
    			//分类
    			StaffType staffType = null;
    			if(null != StaffType.findByStaffTypeName(data.getString(3))){
    				staffType = StaffType.findByStaffTypeNameInExcel(data.getString(3),EnableOrDisable.ENABLE).get(0);
    			}
    			if(null != staffType){
    				staff.setStaffType(staffType);
    			}
    			//备注
    			staff.setNote(data.getString(4));
    			staff.setPhotoAddress("");
    			//状态
    			staff.setValidFlag(EnableOrDisable.NEW);
    			staff.setInsertDate(DateHelper.getCurrentDate());
    			staff.setUpdateDate(DateHelper.getCurrentDate());
    			staff.insertStaff();
    		} catch (Exception e) {
    			throw new BusinessException("第 \'" + data.getRowNum() + "\' 行数据 : 人员名称为 \'"+data.getString(1)+"\' 的数据中  "+e.getMessage()+"请检查");
    		}
    		return staff;
    	}
    }

    6)RowData

    import java.math.BigDecimal;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class RowData
    {
      private int rowNum;
      private int cellCount;
      private Map<Integer, Object> data = new HashMap();
    
    
      public void put(Integer key, Object value)
      {
        this.data.put(key, value);
      }
    
    
      public Object get(Integer index)
      {
        return this.data.get(index);
      }
    
    
      public String getString(Integer index)
      {
        Object obj = this.data.get(index);
        if (obj == null)
          return null;
    
    
        if (obj instanceof String)
          return ((String)obj);
    
    
        return obj.toString();
      }
    
    
      public Integer getInteger(Integer index)
      {
        Object obj = this.data.get(index);
        if (obj == null)
          return null;
    
    
        if (obj instanceof String)
          return Integer.valueOf(((String)obj).trim());
    
    
        return Integer.valueOf(((Double)obj).intValue());
      }
    
    
      public Double getDouble(int index)
      {
        Object obj = this.data.get(Integer.valueOf(index));
        if (obj == null)
          return null;
    
    
        if (obj instanceof String)
          return Double.valueOf(((String)obj).trim());
    
    
        return ((Double)obj);
      }
    
    
      public Date getDate(int index, String pattern)
        throws ParseException
      {
        Object obj = this.data.get(Integer.valueOf(index));
        if (obj == null)
          return null;
    
    
        if (obj instanceof String)
          return parse((String)obj, pattern);
    
    
        if (obj instanceof Double) {
          BigDecimal decimal = new BigDecimal(((Double)obj).doubleValue());
          return parse(decimal.setScale(0).toString(), pattern);
        }
        return parse(obj.toString(), pattern);
      }
    
    
      private static Date parse(String date, String pattern) throws ParseException
      {
        return new SimpleDateFormat(pattern).parse(date);
      }
    
    
      public int getRowNum() {
        return this.rowNum;
      }
    
    
      public void setRowNum(int rowNum) {
        this.rowNum = rowNum;
      }
    
    
      public int getCellCount() {
        return this.cellCount;
      }
    
    
      public void setCellCount(int cellCount) {
        this.cellCount = cellCount;
      }
    
    
      public Map<Integer, Object> getData() {
        return this.data;
      }
    }

    7)
    
    

    展开全文
  • ajax上传excel

    2014-08-27 09:17:49
    ajax 上传excel,结合php端接收!
  • 通过ajax上传excel

    万次阅读 热门讨论 2017-09-19 13:09:52
    html: li> span>上       传:span> span class="input"> input type="file" id="upfile" name="upfile" placeholder=""/> span> button onclick
  • 文件上传EXcel Demo

    2020-10-30 21:24:25
    Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助,Excel文件上传,很小的一个demo,希望对你们有帮助
  • C# 使用ExcelReader 上传excelusing (var reader = ExcelReaderFactory.CreateReader(stream)) { if (reader.ResultsCount > 50) { TempData["error"]
  • 上传Excel至数据库

    2012-12-10 17:34:36
    批量上传Excel数据只数据库 希望对大家有用
  • postman上传excel

    千次阅读 2019-05-03 17:50:05
    最近接口测试,需要用到postman,为了避免重复操作,现在使用excel进行上传参数,分享给小伙伴们:) 1.新建一个collections 2.新建一个接口,保存在collections下,讲需要放在excel参数用{{XX}}代替 3.excel中...
  • angular 上传Excel

    2019-07-01 11:49:31
    import { FileUploader } from 'ng2-file-upload'; this.uploader = new FileUploader({ url: this.importExcelUrl, method: 'POST', itemAlias: 'excel', }); // 选择的文件 selectedFileO...
  • poi上传excel

    2017-11-02 11:48:53
     jsp页面上传文件按扭,文件传到controller进行poi处理成我想要的数据,然后存入数据库   二、controller层   @Controller @RequestMapping("/admin") public class SurnameNameOriginController ...
  • 上传Excel 解析

    2019-06-03 13:33:33
    @RequestMapping(value = "/importExcel.do") public Map<String,Object> importIncomeExcel(HttpServletResponse response, HttpServletRequest request, MultipartFile file) { Map<String,Object&g.....
  • java 上传excel

    2019-06-04 12:00:21
    直接附上案例: 环境:easyUi框架和ssm集成框架,java语言 ,maven管理jar包,tomcat服务器版本8.5, jdk1.8 设计思路: 1、循环遍历每行每列,内层根据列遍历根据io流读取到的信息将每个字段所处位置和实体字段...
  • ajax 上传excel

    2015-12-19 16:50:10
    前几天因为业务的需求,研究了excel上传,页面点击上传,并且在不刷新页面的 情况下,将excel的数据加载到页面。  是在ssh下上传的,之前用的是提交表单,但是发现提交到后台解析后,会刷新页面。于是换了一个...
  • 解析上传excel

    2019-03-27 16:31:53
    package com.util; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import ... import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.ap...
  • SSH上传Excel

    2018-07-31 08:46:25
    1.前台请求 var formData = new FormData();...#file_Excel")[0].files[0]); $.ajax({ url : sy.contextPath+'/base/management-account!doNotNeedSecurity_readExcel.sy', ...
  • 上传Excel功能

    2018-08-09 08:31:34
    工作中用到上传Excel功能,简单记录一下: 1 controller: @RequestMapping(value = "/import", method = RequestMethod.POST) @ResponseBody public Object uploadExcelReinvest(@RequestParam("...
  • java 上传 Excel

    2018-01-03 15:20:29
    后台Controller: @SuppressWarnings(... @ApiOperation(value = "上传excel模板", notes = "上传模板", response = ResultData.class) @RequestMapping(value = "/uploadEmpExcel", method = RequestMethod.PO
  • 上传Excel文件

    2017-11-29 13:57:29
    选择表单 ... 上传  // 上传重点药品  function uploadGoods() {  $('#uploadInput').click();  }  function uploadDo(){      var formData = new FormData();  formD
  • 上传excel文件

    2016-03-08 16:27:00
    javascript: // 上传xls文件 var button = $('#importExcel'); log(button); new AjaxUpload(button, { action : 'phoneNoMarket/xlsupload', name : 'file', onSubmit : function(file, ext) { if (!...
  • TP 上传excel

    2019-10-02 00:18:44
    <?php class ExcelAction extends Action{ public function read($filename,$encode='utf-8'){ vendor('Excel.PHPExcel'); $objReader = PHPExcel_IOFactory::createReader(Exc...

空空如也

1 2 3 4 5 ... 20
收藏数 7,875
精华内容 3,150
关键字:

android序列化