java读excel

java读excel的方法有两种:
1、jxl.jar来读,后来发现无法读取2007的即.xlsx格式
2、poi.jar来读取,支持2007以上的版本,读取.xls时会报错,如下:

org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException:Package should contain a content type part 

 
所以两个方法可以结合使用

jxl方法只需加

 

jxl.jar

 
poi方法需加jar有:

poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
xmlbeans-2.3.0.jar

 

//判断后缀
String pfix=StringUtils.substringAfterLast(saveName, ".").toLowerCase();
if(pfix!=null&&!pfix.equals("xlsx")){
//==========读取excel文件内容=====jxl方法可读取.xls格式
jlxExcel(saveName);
}else{
//==========读取excel文件内容=====poi方法可读取Excel2007即.xlsx格式
poiExcel(saveName);
}

 

 

  //读取.xls格式,jlx方法
private void jlxExcel(String saveName){
		//===============jlx方法=================
		try{
		String realPath = getPath() + "\\" + saveName;
		File fileDes = new File(realPath);
		InputStream str = new FileInputStream(fileDes);
		// 构造Workbook(工作薄)对象
		Workbook rwb=Workbook.getWorkbook(str);
		Sheet rs=rwb.getSheet(0);//获取第一张工作表
		int rsRows=rs.getRows();//获取Sheet表中所包含的总行数
		int rsCols=rs.getColumns();//获取Sheet表中所包含的总列数
		log.info("========行========"+rsRows+"=====列========"+rsCols);
		for(int i=1;i<rsRows;i++){//读取行
			log.info("========执行第========"+i+"行");
			for(int j=0;j<rsCols;j++){
				log.info("========执行第========"+j+"列");
				Cell coo=rs.getCell(j, i);//单元格定位列,再定位行
			
				log.info("========coo========"+coo);
				String strc=coo.getContents();//读取内容
				log.info("========读取内容strc========"+strc);
				System.out.println("文件"+saveName+"的内容为:"+strc);
			}
		}
		rwb.close();  
		}catch (FileNotFoundException e) {   
			 e.printStackTrace();   
		} catch (BiffException e) {   
		 e.printStackTrace();   
		} catch (IOException e) {   
		 e.printStackTrace();   
		}   
			
		//==========读取excel文件内容=结束=====================
		
	}

 //poi读取.xlsx方法

private void poiExcel(String saveName){
		try{
			String realPath = getPath() + "\\" + saveName;
			File fileDes = new File(realPath);
			InputStream str = new FileInputStream(fileDes);
			XSSFWorkbook xwb = new XSSFWorkbook(str);  //利用poi读取excel文件流
			XSSFSheet st = xwb.getSheetAt(0);  //读取sheet的第一个工作表
			int rows=st.getLastRowNum();//总行数
			int cols;//总列数
			log.info("========行========"+rows);
			for(int i=0;i<rows;i++){
				XSSFRow row=st.getRow(i);//读取某一行数据
				if(row!=null){
					//获取行中所有列数据
					cols=row.getLastCellNum();
					log.info("========行========"+rows+"=====列========"+cols);
				for(int j=0;j<cols;j++){
					XSSFCell cell=row.getCell(j);
					if(cell==null){
						System.out.print("   ");  
					}else{
					//判断单元格的数据类型
					switch (cell.getCellType()) {  
	                    case XSSFCell.CELL_TYPE_NUMERIC: // 数字  
	                        System.out.print(cell.getNumericCellValue() + "   ");  
	                        break;  
	                    case XSSFCell.CELL_TYPE_STRING: // 字符串  
	                        System.out.print(cell.getStringCellValue() + "   ");  
	                        break;  
	                    case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean  
	                        System.out.println(cell.getBooleanCellValue() + "   ");  
	                        break;  
	                    case XSSFCell.CELL_TYPE_FORMULA: // 公式  
	                        System.out.print(cell.getCellFormula() + "   ");  
	                        break;  
	                    case XSSFCell.CELL_TYPE_BLANK: // 空值  
	                        System.out.println("");  
	                        break;  
	                    case XSSFCell.CELL_TYPE_ERROR: // 故障  
	                        System.out.println("故障");  
	                        break;  
	                    default:  
	                        System.out.print("未知类型   ");  
	                        break;  
	                    }  
				}
				}
				}
			}
		}catch(IOException e){
			e.printStackTrace();   
		}
		
	}

 

你可能感兴趣的:(Excel)