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

kar*_*sai 3 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("");
}

}
Run Code Online (Sandbox Code Playgroud)

Kir*_* S. 6

XSSFSheet的文档说明了这一点:

rowIterator - 返回物理行的迭代器

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

所以基本上它们返回相同的值,但第二个被添加以支持Java的for-each循环.换句话说,不是获取迭代器和运行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");
    }
}
...  
Run Code Online (Sandbox Code Playgroud)