Java 使用Apache POI库时无法读取一行中的所有单元格值

Java 使用Apache POI库时无法读取一行中的所有单元格值,java,apache,apache-poi,Java,Apache,Apache Poi,当迭代一行中的所有单元格时,我遇到了一个问题,我能够正确地读取前4个单元格,其余所有单元格都为空。谢谢你的帮助 //下面是我正在使用的代码 InputStream is = new FileInputStream(new File(fileName)); Workbook workbook = new XSSFWorkbook(is); int numberOfSheets = workbook.getNumberOfSheets(); for (int i = 0; i

当迭代一行中的所有单元格时,我遇到了一个问题,我能够正确地读取前4个单元格,其余所有单元格都为空。谢谢你的帮助 //下面是我正在使用的代码

InputStream is = new FileInputStream(new File(fileName));
    Workbook workbook = new XSSFWorkbook(is);
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
      Sheet sheet = workbook.getSheetAt(i);
      String name = sheet.getSheetName();
      if (name.equals(sheetName)) {
        Iterator<Row> rowItr = sheet.rowIterator();
        while (rowItr.hasNext()) {
          Row eachRow = rowItr.next();
          QuestionObjBuilder builder = new QuestionObjBuilder();
          Iterator<Cell> cellItr = eachRow.cellIterator();
          int index = 1;
          while (cellItr.hasNext()) {
            Cell eachCell = cellItr.next();
            int cellType = eachCell.getCellType();
            String label = "";
            if (cellType == Cell.CELL_TYPE_STRING) {
              label = eachCell.getStringCellValue();
            } else if (cellType == Cell.CELL_TYPE_NUMERIC) {
              int value = (int) eachCell.getNumericCellValue();
              label = String.valueOf(value);
            }
            builder = builder.set(index, label);
            index++;
            if (index > 10) {
              break;
            }
          }
        }
      }

    }
    workbook.close();

如果您的目标是从excel中读取所有单元格,则可以使用此代码

FileInputStream fileInputStream = new FileInputStream(fileName);
        HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
        HSSFSheet worksheet = workbook.getSheet(sheetName);

        Iterator<Row> it = worksheet.rowIterator();
        while(it.hasNext()){
            HSSFRow r = (HSSFRow) it.next();
            Iterator<Cell> it1=r.cellIterator();
            while(it1.hasNext()){
                HSSFCell cell = (HSSFCell)it1.next();
                System.out.println("Row: "+cell.getRowIndex()+" ,Column: "+cell.getColumnIndex());
                System.out.println(cell);
            }
            System.out.println();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

您的代码在我的设置中运行良好。是QuestionObjBuilder导致了这个问题吗?试着使用一个简单的数字xlsx文件,看看是否有问题。你试过了吗?谢谢你的评论,我在迭代单元格时犯了一个错误。上面的代码对我来说也很好。如果你有文件,不要使用输入流!看看为什么not@Gagravarr当使用输入流而不是文件时,内存使用将发生变化。