2025-02-10

@author YHC

使用Java1.5 foreach 循環迭代遍歷所有行和單元格

     有時候你僅僅隻想迭代遍歷工作薄中的所有行(Row),或者行中所有的單元格,如果你使用的是Java5或者是更高版本,這個非常容易取得進行遍歷

 因為它將允許一種新的foreach循環支持工作.非常幸運,它很簡單,Sheet和Row都實現瞭 java.lang.Iterable接口支持foreach,對於行(Row)

而言,允許訪問CellIterator內部類來支持迭代所有單元格,對於工作薄(Sheet)提供瞭 rowIterator()進行迭代所有的行

[java]
    //根據Workbook得到第個0下標的工作薄對象  
  Sheet sheet = wb.getSheetAt(0); 
//遍歷該工作薄中所有的行  
   for (Row row : sheet) { 
     //遍歷一行中的所有的單元格  
     for (Cell cell : row) { 
       // 你需要實現功能的代碼  
     } 
   } 

           //根據Workbook得到第個0下標的工作薄對象
    Sheet sheet = wb.getSheetAt(0);
  //遍歷該工作薄中所有的行
     for (Row row : sheet) {
       //遍歷一行中的所有的單元格
       for (Cell cell : row) {
         // 你需要實現功能的代碼
       }
     }
獲得單元格內容

     得到一個單元格中的內容,你首先需要知道單元格是什麼類型,(請求一個string類型的單元格,如果他的內容是數字類型,那麼將拋出此異常NumberFormatException 例如),你會想去轉換單元格的類型,然後調用適當的getter方法得到單元格.

    在以下代碼,,我們將遍歷一個工作薄中的所有的單元格,通過CellReference轉換輸出,然後輸出Cell的內容;

  //   import org.apache.poi.ss.usermodel.* //記得導入這個包

 

[java]           
  //創建文件  
 File file=new File("D:/workbook.xls"); 
//初始化輸入流   
FileInputStream is = new FileInputStream(file);   
//創建Excel,並指定Excel讀取位置  
Workbook wb=new  HSSFWorkbook(is); 
//根據Workbook得到第0個下標的工作薄  
Sheet sheet1 = wb.getSheetAt(0); 
//遍歷工作薄中的所有行,註意該foreach隻有Java5或者以上才支持  
   for (Row row : sheet1) { 
    //遍歷行中的所有單元格 Java5+ 才能使用  
       for (Cell cell : row) { 
        //單元格的參照 ,根據行和列確定某一個單元格的位置  
           CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex()); 
           //打印單元格的位置  
           System.out.print(cellRef.formatAsString()); 
           //輸出分隔符  
           System.out.print(" – "); 
               //得到單元格類型  
           switch (cell.getCellType()) { 
               case Cell.CELL_TYPE_STRING://String類型單元格  
                //輸出文本  
                   System.out.println(cell.getRichStringCellValue().getString()); 
                   break; 
               case Cell.CELL_TYPE_NUMERIC://數字類型  
                //檢查單元格是否包含一個Date類型  
                //僅僅隻檢查Excel內部的日期格式,  
                   if (DateUtil.isCellDateFormatted(cell)) { 
                    //輸出日期  
                       System.out.println(cell.getDateCellValue()); 
                   } else { 
                    //輸出數字  
                       System.out.println(cell.getNumericCellValue()); 
                   } 
                   break; 
               case Cell.CELL_TYPE_BOOLEAN://Boolean類型  
                   System.out.println(cell.getBooleanCellValue()); 
                   break; 
               case Cell.CELL_TYPE_FORMULA://公式  
                //輸出公式  
                   System.out.println(cell.getCellFormula()); 
                   break; 
               default: 
                   System.out.println(); 
           } 
       } 
   } 

               //創建文件    www.aiwalls.com
   File file=new File("D:/workbook.xls");
  //初始化輸入流
  FileInputStream is = new FileInputStream(file); 
  //創建Excel,並指定Excel讀取位置
  Workbook wb=new  HSSFWorkbook(is);
  //根據Workbook得到第0個下標的工作薄
  Sheet sheet1 = wb.getSheetAt(0);
  //遍歷工作薄中的所有行,註意該foreach隻有Java5或者以上才支持
     for (Row row : sheet1) {
      //遍歷行中的所有單元格 Java5+ 才能使用
         for (Cell cell : row) {
          //單元格的參照 ,根據行和列確定某一個單元格的位置
             CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
             //打印單元格的位置
             System.out.print(cellRef.formatAsString());
             //輸出分隔符
             System.out.print(" – ");
                 //得到單元格類型
             switch (cell.getCellType()) {
                 case Cell.CELL_TYPE_STRING://String類型單元格
                  //輸出文本
                     System.out.println(cell.getRichStringCellValue().getString());
                     break;
                 case Cell.CELL_TYPE_NUMERIC://數字類型
                  //檢查單元格是否包含一個Date類型
                  //僅僅隻檢查Excel內部的日期格式,
                     if (DateUtil.isCellDateFormatted(cell)) {
                      //輸出日期
                         System.out.println(cell.getDateCellValue());
                     } else {
                      //輸出數字
                         System.out.println(cell.getNumericCellValue());
                     }
                     break;
                 case Cell.CELL_TYPE_BOOLEAN://Boolean類型
                     System.out.println(cell.getBooleanCellValue());
                     break;
                 case Cell.CELL_TYPE_FORMULA://公式
                  //輸出公式
                     System.out.println(cell.getCellFormula());
                     break;
                 default:
                     System.out.println();
             }
         }
     }

 Excel內容如下圖:創建該文件是用的POI Excel 02 中的click me!!!,想看創建點該超鏈接!

 

 

 讀取該文件以及與運行該代碼結果對比:


作者:yhc13429826359
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *