Как проверить, является ли ячейка excel пустой с помощью Apache POI?

18

Я беру данные из листа excel с помощью Poi.jar и хотел знать, как проверить, является ли ячейка пустой или нет.

Сейчас я использую код ниже.

cell = myRow.getCell(3);
if (cell != null) {
    cell.setCellType(Cell.CELL_TYPE_STRING);

    //System.out.print(cell.getStringCellValue() + "\t\t");
    if (cell.getStringCellValue() != "")
        depend[p] = Integer.parseInt(cell.getStringCellValue());

    }
}
    
задан user1312312 02.04.2013 в 14:42
источник

4 ответа

30

Как насчет:

 Cell c = row.getCell(3);
 if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) {
    // This cell is empty
 }
    
ответ дан Gagravarr 03.04.2013 в 07:21
источник
12

Ответ Гаграварра довольно хорош!

Проверить, что ячейка excel пуста

Но если вы предположите, что ячейка также пуста, если она содержит пустую строку (""), вам нужен дополнительный код. Это может произойти, если ячейка не была очищена должным образом (как это сделать, см. Ниже).

Я написал себе помощника, чтобы проверить, является ли XSSFCell пустым (включая пустую строку).

 /**
 * Checks if the value of a given {@link XSSFCell} is empty.
 * 
 * @param cell
 *            The {@link XSSFCell}.
 * @return {@code true} if the {@link XSSFCell} is empty. {@code false}
 *         otherwise.
 */
public static boolean isCellEmpty(final XSSFCell cell) {
    if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
        return true;
    }

    if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue().isEmpty()) {
        return true;
    }

    return false;
}

Пример

В этом тесте JUnit показан случай, когда требуется дополнительная пустая проверка.

Сценарий: содержимое ячейки изменяется в программе Java. Позже, в той же программе Java, ячейка проверяется на пустоту. Тест не сработает, если функция isCellEmpty(XSSFCell cell) не проверяет пустые строки.

@Test
public void testIsCellEmpty_CellHasEmptyString_ReturnTrue() {
    // Arrange
    XSSFCell cell = new XSSFWorkbook().createSheet().createRow(0).createCell(0);

    boolean expectedValue = true;
    boolean actualValue;

    // Act
    cell.setCellValue("foo");
    cell.setCellValue("bar");
    cell.setCellValue("");
    actualValue = isCellEmpty(cell);

    // Assert
    Assert.assertEquals(expectedValue, actualValue);
}

Кроме того: очистить ячейку правильно

На всякий случай, если кто-то хочет знать, как правильно очистить содержимое ячейки. Существует два способа архивирования (я бы рекомендовал way 1 ).

// way 1
public static void emptyCell(final XSSFCell cell) {
    cell.setCellType(Cell.CELL_TYPE_BLANK);
}

// way 2
public static void emptyCell(final XSSFCell cell) {
    String nullString = null;
    cell.setCellValue(nullString);
}

С уважением winklerrr

    
ответ дан winklerrr 16.11.2015 в 10:38
источник
0

Есть и еще один вариант.

row=(Row) sheet.getRow(i);
        if (row == null || isEmptyRow(row)) {
            return;
        }
Iterator<Cell> cells = row.cellIterator();
    while (cells.hasNext())
     {}
    
ответ дан Prashant Gautam 22.09.2015 в 06:22
источник
0
.getCellType() != Cell.CELL_TYPE_BLANK
    
ответ дан El Tall yobro 15.12.2017 в 19:45
источник