excel 解析 xls 和 xlsx

       1.注意:在使用Apache POI操作Excel2007 的时候,POI操作Excel2007的org.apache.xmlbeans.xmlexception  原因:默认官方下载的POI包中没有包含这个 xmlbeans.jar。

    2.NoSuchMethodError: javax.xml.stream.XMLEventFactory.newFactory() ,XMLEventFactory.newFactory()这个API是在JDK 1.6.0.18加入的,你得确保你使用的JDK高于这个版本 。

       本实例: poi3.11.jar      xssfwORK



/**   
	 *  Excel文件解析  xls xlsx 
	 * @author
	 * @version   
	 * @param 
	 */   
	public class ExcelReader {    
	    private POIFSFileSystem fs;    
	    private HSSFWorkbook wb;    
	    private HSSFSheet sheet;    
	    private HSSFRow row;    
	    private HSSFCell cell;
	    
	    private XSSFWorkbook xss;
	    private XSSFSheet xssSheet;
	    private XSSFRow  xssRow;
	    private XSSFCell xssCell;
	    
	    public void readXls(InputStream is) throws IOException {   
	        fs = new POIFSFileSystem(is);    
	        wb = new HSSFWorkbook(fs); 
	        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	        //循环工作表
	        for (int numSheet=0; numSheet<wb.getNumberOfSheets();numSheet++)
	        {
	            sheet = wb.getSheetAt(numSheet);   
	        	if(sheet==null)
	        	{
	        		continue;
	        	}
	        	
	        	//循环行
	        	for(int rowNum=0; rowNum<sheet.getLastRowNum();rowNum++)
	        	{
	        		row = sheet.getRow(rowNum);
	        		if(row==null)
	        		{
	        			continue;
	        		}
	        		
	        		//循环列 单元格
	        		for(int cellNum =0; cellNum< row.getLastCellNum();cellNum++)
	        		{
	        			cell = row.getCell(cellNum); 
	        			if(cell==null)
	        			{
	        				continue;
	        			}
	        			System.out.println(" "+getCellValue(cell));
	        		}
	        	}
	        }
	    }    
	    
	    public List<Map<String,String>> getXls(InputStream is) throws IOException {    	           
	        fs = new POIFSFileSystem(is);    
	        wb = new HSSFWorkbook(fs); 
	        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	        List<String> titleList = new ArrayList<String>();
	        Map<String,String> map = null;
	        //循环工作表
	       
	            sheet = wb.getSheetAt(0);   
	        	
	        	//循环行
	        	for(int rowNum=0; rowNum<sheet.getLastRowNum();rowNum++)
	        	{
	        		row = sheet.getRow(rowNum);
	        		if(row==null)
	        		{
	        			continue;
	        		}
	        		
	        		//循环列 单元格
	        		for(int cellNum =0; cellNum< row.getLastCellNum();cellNum++)
	        		{
	        			
	        			cell = row.getCell(cellNum); 
	        			if(cell==null)
	        			{
	        				continue;
	        			}
	        			
	        			if(rowNum==0)
	        			{
	        				titleList.add(getCellValue(cell));
	        			}else{	        				
	        				 map =  new HashMap<String,String>();
		        			 map.put(titleList.get(cellNum) , getCellValue(cell));
	        			}  			
	        			System.out.println(" "+getCellValue(cell));
	        		}
	        		list.add(map);
	        	}
	        
	        return list;    
	    }    
	    
 	   /*
 	    * 获取cell的内容, 并将其转成String
 	    * param  HSSFCell
 	    * DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符  
        * SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串  
        * DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字  
	    */
	    public String getCellValue(HSSFCell cell) {    
	        String strCell = "";    
	        switch (cell.getCellType()) {    
	        case HSSFCell.CELL_TYPE_STRING:    
	            strCell = cell.getStringCellValue();   
	            break;    
	        case HSSFCell.CELL_TYPE_NUMERIC:    
	        	DecimalFormat df = new DecimalFormat("0");  //数字过长, excel 会把数字变成科学计数法的形式,故需格式化
	        	   strCell = String.valueOf(df.format(cell.getNumericCellValue()));     
	            break;    
	        case HSSFCell.CELL_TYPE_BOOLEAN:    
	            strCell = String.valueOf(cell.getBooleanCellValue());    
	            break;    
	        case HSSFCell.CELL_TYPE_BLANK:    
	            strCell = "";    
	            break;   
	        default:    
	            strCell = "";    
	            break;    
	        }          
	        return strCell;    
	    }  
	    
	    
//-------------------------------------------------------------------------------------	  
	    
	   // NoSuchMethodError: javax.xml.stream.XMLEventFactory.newFactory()
	   //XMLEventFactory.newFactory()这个API是在JDK 1.6.0.18加入的,你得确保你使用的JDK高于这个版本 
	    
	    public String getXssCellValue(XSSFCell cell) {    
	        String strCell = "";    
	        switch (cell.getCellType()) {    
	        case XSSFCell.CELL_TYPE_STRING:    
	            strCell = cell.getStringCellValue();   
	            break;    
	        case XSSFCell.CELL_TYPE_NUMERIC:    
	        	DecimalFormat df = new DecimalFormat("0");  //数字过长, excel 会把数字变成科学计数法的形式,故需格式化
	        	   strCell = String.valueOf(df.format(cell.getNumericCellValue()));     
	            break;    
	        case XSSFCell.CELL_TYPE_BOOLEAN:    
	            strCell = String.valueOf(cell.getBooleanCellValue());    
	            break;    
	        case XSSFCell.CELL_TYPE_BLANK:    
	            strCell = "";    
	            break;   
	        default:    
	            strCell = "";    
	            break;    
	        }          
	        return strCell;    
	    }  
	    
	    
	    public void readXlsx(InputStream is) throws IOException {   
	        xss = new XSSFWorkbook(is);
	        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	        //循环工作表
	        for (int numSheet=0; numSheet<xss.getNumberOfSheets();numSheet++)
	        {
	            xssSheet = xss.getSheetAt(numSheet);   
	        	if(xssSheet==null)
	        	{
	        		continue;
	        	}
	        	
	        	//循环行
	        	for(int rowNum=0; rowNum<xssSheet.getLastRowNum();rowNum++)
	        	{
	        		xssRow = xssSheet.getRow(rowNum);
	        		if(xssRow==null)
	        		{
	        			continue;
	        		}
	        		
	        		//循环列 单元格
	        		for(int cellNum =0; cellNum< xssRow.getLastCellNum();cellNum++)
	        		{
	        			xssCell = xssRow.getCell(cellNum); 
	        			if(xssCell==null)
	        			{
	        				continue;
	        			}
	        			System.out.println(" "+getXssCellValue(xssCell));
	        		}
	        	}
	        }
	    }    
	    
	    public List<Map<String,String>> getXlsx(InputStream is) throws IOException {    	           
	       XSSFWorkbook  xss = new XSSFWorkbook(is);
	        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	        List<String> titleList = new ArrayList<String>();
	        Map<String,String> map = null;
	        //循环工作表
	       
	            xssSheet = xss.getSheetAt(0);   
	        	
	        	//循环行
	        	for(int rowNum=0; rowNum<xssSheet.getLastRowNum();rowNum++)
	        	{
	        		xssRow = xssSheet.getRow(rowNum);
	        		if(xssRow==null)
	        		{
	        			continue;
	        		}
	        		
	        		//循环列 单元格
	        		for(int cellNum =0; cellNum< xssRow.getLastCellNum();cellNum++)
	        		{
	        			
	        			xssCell = xssRow.getCell(cellNum); 
	        			if(xssCell==null)
	        			{
	        				continue;
	        			}
	        			
	        			if(rowNum==0)
	        			{
	        				titleList.add(getXssCellValue(xssCell));
	        			}else{	        				
	        				 map =  new HashMap<String,String>();
		        			 map.put(titleList.get(cellNum) , getXssCellValue(xssCell));
	        			}  			
	        			System.out.println(" "+getXssCellValue(xssCell));
	        		}
	        		list.add(map);
	        	}
	        
	        return list;    
	    }    

注意:xls文件, xlsx文件解析必须要分别对应 HSSFWorkbook,  XSSFWorkbook  对象,   

xls文件直接改扩展名 去解析 各种异常。。。。    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值