Почему «cellIterator.hasNext ()» получает значение «ИСТИНА», хотя ячейка имеет пустое значение - PullRequest
1 голос
/ 04 мая 2019

рассмотрите скриншот моего ExcelSheet ниже

enter image description here

Теперь рассмотрим код ниже, который будет повторять каждую строку, затем повторять каждую ячейку и затем печатать значение ячейки.

public void excelData2(int sheetNo) {
    Iterator<Row> rowIterator = workbook.getSheetAt(sheetNo).rowIterator();
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();

        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            String cellValue = dataFormatter.formatCellValue(cell);
            System.out.print(cellValue + "\t");
        }
        System.out.println();
    }
}

На самом деле, глядя на таблицу Excel, мы видим, что есть 2 строки и 1 столбец справа !!.

Итак, первый цикл while повторяется два раза, как и ожидалось :), но внутренний цикл while, который является cellIterator, повторяется 26 раз вместо 1, даже если в следующей ячейке нет значения вЭто.В идеале, когда во 2-й итерации cellIterator.hasNext() должно давать ложное право?почему он дает истинное значение до 26 раз?У кого-нибудь есть идея?

Примечание: Я не хочу ставить условие, например isEmpty() или =="" и т. д.

Примечание2: У меня есть другое решение, я могу пойти с этим.Но я хочу знать, почему это происходит.

1 Ответ

2 голосов
/ 04 мая 2019

Согласно документам по POI (используется LibreOffice):

org.apache.poi.xssf.streaming.SXSSFRow.CellIterator

возвращает все ячейки, включая пустые ячейки

...