为什么我在获得一个excel单元格时得到一个nullpointerexception?

得到一个单元格时,我得到这个exception。 这就是我正在做的事情:

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)里面的,每次迭代一个List值时,我都会dynamic获得一个新的单元格。

问题是,每当它到达第一个col:row(H:29),我得到一个NullPointerException。

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


我在java中获得了一个X / Y值的集合,开始读取它,但是每当它达到一定数量的值,我在这一行中得到一个NullPointerException:

 Cell cellx = row.getCell(8); 

java列表没有问题。 如果我放置较less的X / Y对(即:5或6对),效果很好,但是超过一定的数量(比如说大于10),我就会得到这个例外。

试图寻找细胞,一切似乎都很好


编辑:感谢人们的帮助! 我开始使用POI的XSSF / HSSF。 试过以前使用它,但我不能让它正常运行,但现在我做了,它使用createRow-createCell方法完美的作品:)

org.apache.poi.ss.usermodel.Sheetorg.apache.poi.ss.usermodel.Row都是Iterable 。 如果您在嵌套的for-each循环中使用迭代器,如下所示,您应该只获取定义的行。

根据POI文档,如果您要求未定义的行,则返回null。 从连续获得一个单元也是如此。 我会假设一行或一个单元格不存在。

另外,请注意getCell简短版本被弃用,以支持getCell(int)

POI表

POI行

您可以使用getLastRowNum来validation您所期望的行数是否存在。 和getLastCellNum一样

如果你正在创build一个sheet / row / cell,你需要使用create方法。 不是获取方法。

创build行

创build单元格

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

POI指南