使用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
    评论
// 循环工作表Sheet for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { //o--对应第一张工作表如默认情况下sheet1 hssfSheet = hssfWorkbook.getSheetAt(numSheet); //System.out.println("表明"+hssfSheet.getSheetName()); if (hssfSheet == null) { continue; } //首先获得第一行的数据 HSSFRow rowFirst=hssfSheet.getRow(0); // 循环行Row for (int rowNum = 1; rowNum <=hssfSheet.getLastRowNum(); rowNum++) {// //获取行对象 HSSFRow hssfRow = hssfSheet.getRow(rowNum); if(hssfRow!=null) { //构建comp对象 CompShows comp=new CompShows(); //初始化所有comp默认为1 comp.setTypeOfTransaction(1); //根据列单元格的名字规划数据 int t=hssfRow.getLastCellNum(); // System.out.println(t+"fffffffffffffsssssssssssss"); for(int i=0;i<t;i++) { //遍历根据i获得数据和列名 HSSFCell hcFirst=rowFirst.getCell(i); // System.out.println(getValueForString(hcFirst)+"========"); //if("客户帐号".equals(hssfrow)) //获得每一列的列名 HSSFCell hc=hssfRow.getCell(i); if("客户名称".equals(getValueForString(hcFirst).toString())||"户名".equals(getValueForString(hcFirst))||"交易户名".equals(getValueForString(hcFirst))) { //System.out.println("客户账号"+getValue(hc)); //表示该列数据存储的是账户名 comp.setName((String)getValueForString(hc)); }else if("账号".equals(getValueForString(hcFirst))||"客户帐号".equals(getValueForString(hcFirst))||"交易账号".equals(getValueForString(hcFirst))) { //表示该列数据存储的是账号 comp.setAccount((String)getValueForString(hc)); //System.out.println("账号"+getValue(hc)); }else if("交易日期".equals(getValueForString(hcFirst))||"交易时间".equals(getValueForString(hcFirst))) {

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值