java - Apache POI .getCell() 错误,java.lang.NullPointerException Cannot Read Cell if blank

标签 java excel apache nullpointerexception apache-poi

我最近在使用 Apache POI 的 Excel 文件的 .getCell() 方法时遇到了问题。如果我尝试实现 Cell newCell = sheet.getRow(rowNumber).getCell(columnNumber) 或类似的东西,我总是会收到错误

Exception in thread "main" java.lang.NullPointerException
at ExcelWriter.getWorkbook(ExcelWriter.java:80)
at Gui2.<init>(Gui2.java:93)
at Main.main(Main.java:24)

如果单元格为空,它指向我正在实现 .getCell() 方法的行。我有代码应该确定单元格是否为空,如果为空则打印一些内容,但似乎单元格为空会导致程序出错。然而,这只发生在某些情况下,我发现如果我创建一个工作表并进行 for 循环以在每一行中创建一个新单元格,我可以读取一个空白单元格并确定它是空白的。但是,如果我随后在该工作表的任何单元格中键入一个值,然后尝试读取不同的空单元格,我会再次收到错误消息。我不明白为什么只有当我尝试读取空单元格时才会出现此错误,但我需要在我的程序中循环遍历它们。这是我的代码片段以及导致错误的原因。

public void getWorkbook(String fileName)
{
    try 
    {
        existingFile = new FileInputStream(new File(fileName));
        workbook = new XSSFWorkbook(existingFile);
        Sheet newSheet = workbook.getSheet("Test3");
        //createSheet("Test3", workbook);

        Cell newCell = newSheet.getRow(1).getCell(1);
        if(newCell == null)
        {
            System.out.println("Null");
        }
        else if(newCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)
        {
            System.out.println("Number");
        }
        //System.out.println(newCell.getStringCellValue());
    } 
    catch (FileNotFoundException e) //Couldn't find file
    {
        e.printStackTrace();
    } 
    catch (IOException e) //Couldn't create workbook
    {
        e.printStackTrace();
    }
}

需要说明的是,代码中引用的单元格 B2 是空白的。但是,A1 不是,但是当我读取 A1 时,系统会按预期打印“Number”。

最佳答案

Apache POI Javadocs 中所述, Sheet.getRow(num) 可以返回 null,如果该行从未被使用过,因此还没有被写入文件

Apache POI docs on iterating over rows and cells 中所述,如果你想遍历所有行,然后获取一个特定的列,你需要做这样的事情:

// Decide which rows to process
int rowStart = Math.min(15, sheet.getFirstRowNum());
int rowEnd = Math.max(1400, sheet.getLastRowNum());

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
   Row r = sheet.getRow(rowNum);
   if (r == null) {
      // No entries in this row
      // Handle empty
      continue;
   }

   int cn = 1;
   Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
   if (c == null) {
      // The spreadsheet is empty in this cell
   } else {
      // Do something useful with the cell's contents
   }
}

关于java - Apache POI .getCell() 错误,java.lang.NullPointerException Cannot Read Cell if blank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31184499/

相关文章:

java - 与数据库建立连接的要求

java - 多线程,读取多个文件并并行发送到服务器

excel - Excel 电子表格中的多个单元格背景颜色

vba - 创建范围排除中间列

php - 在 Symfony2 中移除 web/app.php

java - 贴图缩小数组超出范围异常

apache - 在 URL 路径中使用双斜线不好吗?

java - 如何检索参数化类的类

excel - 从 Excel 中的文本单元格中提取 URL

java - 输入不匹配异常错误 学生成绩和姓名