java通过poi解析Excel文件,直接读取客户端文件

	//Excel解析方法
	public List<Map> readXlss(String path,InputStream fi,int beginColumn,int fieldCount) throws IOException{  
		List<Map> maps = new LinkedList<Map>();
		Map map = null;
		InputStream is = null;
		try{
			if(fi != null){
				is = fi; 
			}else{
				is = new FileInputStream(path);
			}

		    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);		    
		    //循环工作表Sheet  
		    for(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){  
				HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);  
				if(hssfSheet == null){  
					continue;  
				}  
		        
				//循环行Row   
				for(int rowNum = beginColumn; rowNum <= hssfSheet.getLastRowNum(); rowNum++){  
					HSSFRow hssfRow = hssfSheet.getRow(rowNum);  
					if(hssfRow == null){  
						continue;  
					}  

					map = new HashMap();
			        for(int i=0;i<=fieldCount;i++){
				        map.put(i, getValue(hssfRow.getCell(i)));
			        }
			        maps.add(map);
				}  
		    }  
		}catch (Exception e) {
			MailConstant.WriterLine("#Excel Error ["+e.getMessage()+"] "+System.currentTimeMillis());
		}
		
		return maps;
	}
	private String getValue(HSSFCell hssfCell){  
		String val = "";
	    try {	    	
	    	if(null != hssfCell) { 
                switch(hssfCell.getCellType()) { 
	                case HSSFCell.CELL_TYPE_NUMERIC: // 数字 
	                	if (HSSFDateUtil.isCellDateFormatted(hssfCell)) {   
	                        //如果是date类型则 ,获取该cell的date值   
	                        val = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue()));   
	                    } else { // 纯数字   
	                        val = String.valueOf(hssfCell.getNumericCellValue());
	                    }
	                    break; 
	                case HSSFCell.CELL_TYPE_STRING: // 字符串 
	                	val = hssfCell.getStringCellValue(); 
	                    break; 
	                case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean 
	                	break; 
	                case HSSFCell.CELL_TYPE_FORMULA: // 公式 
	                    break; 
	                case HSSFCell.CELL_TYPE_BLANK: // 空值 
	                    break; 
	                case HSSFCell.CELL_TYPE_ERROR: // 故障 
	                    break; 
	                default: 
	                    break; 
	                } 
	        }
		} catch (Exception e) {
			return "";
		}  
	    return val;
	} 	


以上是解析Excel的通用方法,将excel解析为List<Map>的方式进行返回使用。readXlss方法具有双重参数,既可以传文件路径解析,也可以直接传 文件流,优选判断文件流。


前端的jsp表单:

<s:form name="sbform" id="sbform" method="post" enctype="multipart/form-data" action="*.action"> 	
	<table width="80%" align="left">
		<tr>
			<td align="left">
				Excel路径:<s:file name ="myFile" label ="Excel File" ></s:file>	
			</td>
		</tr>							
		<tr>
			<td align="left">
				<input id="btn" type="submit" value=" 保 存 " οnclick=""> 
			</td>
		</tr>									
	</table>			
</s:form>


Struts2 action中的字段:

private File myFile;


Struts2 action中的业务处理

InputStream is = new FileInputStream(myFile);
//获取excel文件列表数据
List<Map> maps = readXlss(" ",is,1,14);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值