2011-09-19 131 views
2

我在获取单元格时遇到此异常。这是我在做什么:为什么我在获得Excel单元格时遇到nullpointerexception

if(versionToAdd.equals("15.6")) {   
    Cell X = wb.getSheetAt(0).getRow(28+j).getCell((short)7); 
    Cell Y = wb.getSheetAt(0).getRow(28+j).getCell((short)8); 
    X.setCellValue(x); 
    Y.setCellValue(y); 
} 

此代码它的内部for循环(J),我每次迭代值的列表时,我得到一个新的细胞动态。

问题是,只要它到达第一个col:row(H:29),我就会得到一个NullPointerException。

注意:xls文件中的单元格是空白的......这可能是问题吗?


我在java中X/Y值的集合,开始读它,但只要达到一定的量的值,我得到这一行一个NullPointerException:

Cell cellx = row.getCell(8); 

化java名单很好。 如果我放置较少的X/Y对(即:5对或6对),效果很好,但超过一定的数量(比如说大于10),我就会得到这个例外。

试图寻找细胞,一切似乎要被罚款


编辑:谢谢你的人对你有所帮助!我开始使用POI的XSSF/HSSF。试图使用它之前,但我无法得到它正常运行,但现在我做了,它使用createRow-createCell方法完美:)

+1

如果你想调试这个问题,那么不要像你在做链式方法调用。它只会使得找出哪个方法调用失败更困难。将语句放在不同的行上,然后堆栈跟踪应该告诉你什么是空的。 –

+0

这是一个web应用程序,不知道如何调试它哈哈:P – msqar

+0

好吧,在这种情况下,尝试并提取处理,以便它可以运行在Web应用程序和非Web应用程序的方式。这将使你的应用程序更容易测试:) –

回答

1

根据POI文档,如果你要求一行没有定义,返回null。 从一行中获取单元格也是如此。我会假设一行或一个单元格不存在。

另外,还要注意的是,版本getCell的赞成不赞成getCell(INT)

POI Sheet

POI Row

您可以使用getLastRowNum验证您预期的行数存在。 getLastCellNum也是如此。

如果要创建工作表/行/单元格,则需要使用create方法。不是获取方法。

Create Row

Create Cell

用户指南中的前三项是:如何创建工作簿,如何创建表,如何创建细胞。在发布问题之前,您应该检查文档。

POI Guide

+0

我知道,但我不再使用HSSF,因为我在编辑和重写问题时没有遇到任何问题,所以我使用这个: import org.apache.poi.ss .usermodel.Cell; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; 由于WorkbookFactory。 – msqar

+0

以这种方式,所有的POI课程都是一样的。重点是你假设行或单元格存在,而不是。您需要进行一些额外的调试以确定哪种假设不正确。 –

+0

但是,如何创建此单元格,需要创建它才能设置X/Y合并值。 – msqar

相关问题