为什么这个for循环不使用apachepoi遍历行?JAVA

为什么这个for循环不使用apachepoi遍历行?JAVA,java,excel,for-loop,apache-poi,Java,Excel,For Loop,Apache Poi,我有一个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++

我有一个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++;  

    }                        
}

for(int k=1;k因此,使用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
  }
}
这其中最重要的部分实际上是“抓取”正确的工作表,正如您在代码段的第一行中所看到的,并迭代所需的部分,而不是指定要开始的行。相反,您希望有选择地操作数据,如下所示:

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++;  

     }                        
}
private void startParsing(){
对于(int i=0;i对于(int i=0;i您期望的输出是什么?此外,请遵守有关变量和类的Java命名约定。@AndrewLeach该程序必须阅读E6、F6、G6、H6、I6,然后阅读E7、F7、G7、H7、I7非常感谢,我在学习如何使用poi时遇到了困难,这对我帮助很大!