使用poi操作excel

apache的poi jar包操作excel 分了两种方法 :操作2003 和2007的处理方式不一样
这两种操作方法我在网上找到了 参考资料

所需的jar包地址:http://download.csdn.net/detail/stamsuper1/5809125



本人觉得这种区分开来操作有点复杂
于是乎在网上搜集资料 发现可以统一处理
这是得到workBook对象

 public static final Workbook createWb(String filePath) throws IOException{
			InputStream inputStream=new FileInputStream(filePath);
			 if(filePath==null || filePath.equals("")) {
			     throw new IllegalArgumentException("参数错误!!!") ;
			 }
			 if(filePath.trim().toLowerCase().endsWith("xls")) {
			     return new HSSFWorkbook(inputStream) ;
			 } else if(filePath.trim().toLowerCase().endsWith("xlsx")) {
			     return new XSSFWorkbook(inputStream) ;
			 } else {
			     throw new IllegalArgumentException("不支持除:xls/xlsx以外的文件格式!!!") ;
			 }
	 }


读取workbook里面的数据

private List readXlsx() throws IOException {
		String fileName="F:\\report.xlsx";
		List<Map<String, String>> res=new ArrayList<Map<String, String>>();
		Map<String, String> rowMap=null;
		Workbook workBook=createWb(fileName);
		String []headers=null;
		
		//循环工作表sheet
		for(int numSheet=0;numSheet<workBook.getNumberOfSheets();numSheet++){
			Sheet sheet=workBook.getSheetAt(numSheet);
			if (sheet==null) {
				continue;
			}
			
			//循环行row
			for (int rowNum = 0; rowNum <= sheet.getPhysicalNumberOfRows(); rowNum++) {
				Row row=sheet.getRow(rowNum);
				if (row==null) {
					continue;
				}
				if(rowNum==0){
					headers=new String [row.getLastCellNum()];
					for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
						Cell cell=row.getCell(cellNum);
						if(cell==null){headers[cellNum]="";}
						else{headers[cellNum]=getValueFromCell(cell);}
					}
					continue;
				}
				rowMap=new HashMap<String, String>();
				//循环列cell
				for (int cellNum =0; cellNum < row.getLastCellNum(); cellNum++) {
					Cell cell=row.getCell(cellNum);
					rowMap.put(headers[cellNum], getValueFromCell(cell));
				}
				res.add(rowMap);
			}
		}
		return res;
	}


//获取单元格里面的数据

private String getValueFromCell(Cell cell) {
	     if(cell == null) {
//	         printf("Cell is null !!!") ;
	         return null ;
	     }
	     String value = null ;
	     switch(cell.getCellType()) {
	         case Cell.CELL_TYPE_NUMERIC :   // 数字
	             if(HSSFDateUtil.isCellDateFormatted(cell)) {        // 如果是日期类型
	                 value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()) ;
	             } else  value = String.valueOf(cell.getNumericCellValue()) ;
	             break ;
	         case Cell.CELL_TYPE_STRING:     // 字符串
	             value = cell.getStringCellValue() ;
	             break ;
	         case Cell.CELL_TYPE_FORMULA:    // 公式
	             // 用数字方式获取公式结果,根据值判断是否为日期类型
	             double numericValue = cell.getNumericCellValue() ;
	             if(HSSFDateUtil.isValidExcelDate(numericValue)) {   // 如果是日期类型
	                 value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()) ;
	             } else  value = String.valueOf(numericValue) ;
	             break ;
	         case Cell.CELL_TYPE_BLANK:              // 空白
	             value ="內容為空白";
	             break ;
	         case Cell.CELL_TYPE_BOOLEAN:            // Boolean
	             value = String.valueOf(cell.getBooleanCellValue()) ;
	             break ;
	         case Cell.CELL_TYPE_ERROR:              // Error,返回错误码
	             value = String.valueOf(cell.getErrorCellValue()) ;
	             break ;
	         default:value = "" ;break ;
	     }
	     // 使用[]记录坐标
	     return value + "["+cell.getRowIndex()+","+cell.getColumnIndex()+"]" ;
	    }  





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值