何时使用rowiterator和迭代器迭代excel表的行

时间:2016-03-20 02:53:32

标签: java excel iterator apache-poi

下面列出了读取Excel电子表格(.xlsx)内容的代码。要遍历每一行,我正在使用工作表对象的iterator()方法,这很有效。此外,如果我使用rowIterator()方法,它也可以正常工作。

这两个功能之间的区别是什么,何时使用哪个。

{

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("");
}

}

1 个答案:

答案 0 :(得分:6)

XSSFSheet的文档说明了这一点:

  

rowIterator - 返回物理行的迭代器

     

iterator - rowIterator()的别名以允许foreach循环

所以基本上他们返回相同的值,但第二个被添加到支持Java的for-each loop。换句话说,不是获取迭代器并运行while循环,而是可以直接运行for-each循环,这使代码更短,更易读:

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");
    }
}
...