2016-03-20 54 views
0

讀取Excel電子表格(.xlsx)內容的代碼包含在下面。爲了迭代每一行,我使用了表單對象的方法iterator(),這很好。另外,如果我使用rowIterator()方法,它也可以很好地工作。何時使用rowiterator和迭代器遍歷Excel表格的行

這兩個函數和何時使用哪些區別有什麼區別。

{ 

FileInputStream fis = new FileInputStream(new File("E:\\readexcel.xlsx")); 
XSSFWorkbook wb = new XSSFWorkbook(fis); 
XSSFSheet sh = wb.getSheetAt(0); 
Iterator<Row> rowIterator = sh.iterator(); // sh.rowIterator(); -- also works well 
while(rowIterator.hasNext()){    
    Row row = rowIterator.next();    
    Iterator<Cell> cellIterator = row.iterator(); //row.cellIterator();-- also works well    
    while(cellIterator.hasNext()){     
     Cell cell = cellIterator.next(); 
     System.out.print(cell.getStringCellValue()+"\t"); 
    } 
       System.out.println(""); 
} 

} 

回答

4

XSSFSheet文檔說這個:

rowIterator - 返回物理行的迭代器

迭代 - 別名rowIterator()允許foreach循環

So basica他們返回相同的值,但第二個被添加來支持Java的for-each loop

FileInputStream fis = new FileInputStream(new File("E:\\readexcel.xlsx")); 
XSSFWorkbook wb = new XSSFWorkbook(fis); 
XSSFSheet sh = wb.getSheetAt(0); 
for(Row row : sh) {    
    for(Cell cell : row) { 
     System.out.print(cell.getStringCellValue()+"\t"); 
    } 
} 
... 
+0

感謝:換句話說,不是得到的迭代器,並運行while循環,你可以直接for-each循環,這使得代碼更短,更易讀跑!基本上我的問題是什麼時候使用父類方法和子類方法時,都產生相同的結果。你能否在此添加更多細節。謝謝 – karusai

+0

哪位家長和哪個孩子?它們都是同一類的方法(XSSFSheet)。 –

+0

感謝Kiril對此主題的洞察力。 sh.iterator();是父類方法和sh.rowIterator();是子類方法。它不是?如果我錯了,請糾正。謝謝 – karusai