为什么这个for循环不使用Apache POI迭代通过行? Java的

我有一个for循环内的另一个循环,第一个循环设置行,第二个循环读取通过4个单元格,第一次循环运行它效果很好,但之后,即时通讯猜测其不变行,因为它只是重复结果第一个循环,但没有显示单元格的值,这里是代码:

for(int k=1; k<=2; k++){ XSSFRow row1 = worksheet.getRow(e); System.out.println("Row: "+e); e++; for(int i=0;i<Oleo18_1.size();i++){ XSSFCell c = row1.getCell((short) d); if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { Oleo18_1.set(i, false); } else { Oleo18_1.set(i, true); c.setCellType(Cell.CELL_TYPE_STRING); } if(Oleo18_1.get(i) == true){ values_18_1.set(i, 9.09090909); } String a1Val = c.getStringCellValue(); System.out.println("valor ponderacion"+(d+1)+": "+values_18_1.get(i)); System.out.println("valor celda "+(d+1)+": "+a1Val); d++; } } 

因此,对于使用Apache POI,迭代单元格的最简单方法是使用“ 繁忙开发人员指南”中的提示,该指南演示在for-each循环中进行迭代,因为行可以像这样迭代:

遍历行和单元格

有时候,你只需要遍历表中的所有行,或者遍历一行中的所有>单元格。 这是可能的一个简单的循环。

幸运的是,这很容易。 Row定义了一个CellIterator内部类来处理对单元格的迭代(通过调用row.cellIterator()获得一个),Sheet提供了一个rowIterator()方法来为所有行提供一个迭代器。 这些实现了java.lang.Iterable接口来允许foreach循环。

 Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { // Do something here } } 

其中最重要的部分实际上是“抓取”正确的工作表,正如您可以在代码段的第一行中看到的一样,遍历所需的部分而不是指定要开始的行。 相反,你想要有select地操纵你的数据如下:

 private void startParsing() { for (int i = 0; i < worksheet.getPhysicalNumberOfRows(); i++) { if (i == ROW_E || i == ROW_F) { mutateCell(worksheet.getRow(i)); } } } private void mutateCell(final Row curRow) { for(int i=0;i<Oleo18_1.size();i++){ XSSFCell c = curRow.getCell((short) d); if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { Oleo18_1.set(i, false); } else { Oleo18_1.set(i, true); c.setCellType(Cell.CELL_TYPE_STRING); } if(Oleo18_1.get(i) == true){ values_18_1.set(i, 9.09090909); } String a1Val = c.getStringCellValue(); System.out.println("valor ponderacion"+(d+1)+": "+values_18_1.get(i)); System.out.println("valor celda "+(d+1)+": "+a1Val); d++; } }