Java 正在尝试分析Excel文件

Java 正在尝试分析Excel文件,java,apache-poi,Java,Apache Poi,我试图以这样一种方式解析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.getS

我试图以这样一种方式解析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);
            }
        }
}
for(int e=0;e

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

知道哪一行给出了异常可能很有用,但我打赌是这一行:

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

据我所知,如果单元格为空,则策略会将\u BLANK \u作为\u NULL返回。因此,如果单元格为空,则if语句中的
cell.getCellType()
会引发NullPointerException。

如果在第一次检查中有NPE,则单元格为NULL:

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

知道在哪一行抛出
NullPointerException
会很有用。在第行if(cell.getCellType()!=cell.cell\u TYPE\u BLANK){如果cell为null,它可能在这一行失败
if(cell.getCellType()!=cell.cell\u TYPE\u BLANK)
您到底尝试了什么?返回\u BLANK\u,因为\u NULL听起来非常可疑,不是吗。这几乎意味着它在某些情况下可能会返回NULL。也许您应该检查单元格0是否存在这种情况。这是因为我想查看所有的可能性,但两种可能性都不起作用properly@user1853125-如某人所述,返回\u BLANK\u为\u NULL如果单元格为空,则返回NULL。然后在第一个代码段中获得NPE。当我将其更改为行时,确定。返回\u NULL\u和\u BLANK我还获得NPE@user1853125-try Row.CREATE_NULL_AS_blank我将尝试此解决方案,但第一个结果不起作用,因此我需要做什么才能知道单元格为空,而不会出现异常?您可以按照n在其他列中,正确地检查了(cell==null)。