0

我正在尝试以这样一种方式解析 excel 文件,即当我找到一个空单元格时,我将添加到字符串的值中。示例代码:

for (int e = 0; e < wb.getNumberOfSheets(); e++) {
    sheet = wb.getSheetAt(e);
    for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum(); i++) {
        System.out.println(sheet.getSheetName());
        row = sheet.getRow(i);
        if(row != null) {
            cell = row.getCell(0, Row.RETURN_BLANK_AS_NULL);
            if(cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                cell = row.createCell(i);
                cell.setCellValue("foo");
            }
            cell = row.getCell(1, Row.RETURN_BLANK_AS_NULL);
            if(cell == null) {
                cell = row.createCell(i);
                cell.setCellValue("bar");
            }
            cell = row.getCell(2, Row.RETURN_BLANK_AS_NULL);
            if(cell == null) {
                cell = row.createCell(i);
                cell.setCellValue(0.0);
            }
        }
}

我尝试了很多解决方案,我总是得到一个异常 NullPointerException。

4

2 回答 2

1

知道哪一行给了你例外可能很有用,但我敢打赌是这一行:

cell = row.getCell(0, Row.RETURN_BLANK_AS_NULL);
if(cell.getCellType() != Cell.CELL_TYPE_BLANK) {

据我所知,如果单元格为空,则策略 RETURN_BLANK_AS_NULL将返回空值。因此,如果您在那里得到一个空白单元格,cell.getCellType()则 if 语句中的 引发 NullPointerException。

于 2012-12-21T14:00:20.893 回答
0

您在第一次检查中有 NPE,单元格为空:

cell = row.getCell(0, Row.RETURN_BLANK_AS_NULL);
if(cell.getCellType() != Cell.CELL_TYPE_BLANK) {

稍后您检查正确:

cell = row.getCell(2, Row.RETURN_BLANK_AS_NULL);
if(cell == null) {

创建新的细胞使用

Row.CREATE_NULL_AS_BLANK
于 2012-12-21T14:00:26.900 回答