我的代码还有另一个问题。我有一个错误 线程“main”中的异常java.lang.NullPointerException
我理解的是初始化问题。但是我不知道如何初始化HSSFRow对象'row'(netbean表示'row'必须初始化)。
错误行是'for'循环之前的第10行。当我为变量'cols'运行像4这样的整数值的代码时,一切都很好。
这里是摘要代码
try{
InputStream input = new BufferedInputStream(new FileInputStream("C:/Bookessais.xls"));
POIFSFileSystem fs = new POIFSFileSystem( input );
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row;/* Initialisation*/
HSSFCell cell = null;
int theColIndexYouWant = 3;
int cols = row.getLastCellNum();// ERROR LINE
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++)
{
row = sheet.getRow(rowIndex);
if (row != null) {
double key = 0.0;
for (int colIndex = 0; colIndex < cols; colIndex++)
{
if (colIndex == theColIndexYouWant)
{
int colIndex1 = colIndex - 3;
String key1;
cell = row.getCell(colIndex);
if(HSSFCell.CELL_TYPE_NUMERIC== cell.getCellType())
key = cell.getNumericCellValue();
System.out.println("\n");
System.out.println(" the key is---" +key);
System.out.println(" initial date is: "+ exDate);
if(key == exDate){ System.out.println(" IT IS A MATCH!");}
else System.out.println(" NOT A MATCH");
cell = row.getCell(colIndex1);
key1 = cell.getStringCellValue();
if(HSSFCell.CELL_TYPE_STRING==cell.getCellType())
System.out.println(" the task is: " +key1+ " Line: "+rowIndex);
}
}
}
}
}
catch ( IOException ex ) {
ex.printStackTrace(System.out);
我试图捕获Null指针异常,但它也不起作用。我可以帮忙吗? 感谢
答案 0 :(得分:1)
您可以通过获取工作表的第一行来初始化它:
HSSFRow row = sheet.getRow(sheet.getFirstRowNum());
答案 1 :(得分:0)
您声明了row
变量但从未初始化它。因此,当您致电row.getLastCellNum();
时,它仍然是null
。并且您无法在null
的对象上调用方法。它会抛出你收到的错误!
要解决问题,请将值归因于您的变量,并根据其服务目的进行定义。通过摘录你我只能猜到它应该是什么!
编辑:因为你只在嵌套for循环的终止条件中使用cols
,所以在循环之前移动变量的声明。使用变量的最小范围也是一种很好的做法。
double key = 0.0;
int cols = row.getLastCellNum();
for (int colIndex = 0; colIndex < cols; colIndex++)
// and so on.
答案 2 :(得分:0)
尝试在int cols = row.getLastCellNum();
之后放置此行row = sheet.getRow(rowIndex);
。您需要从已定义的工作表中获取一行才能对该行执行任何操作。
答案 3 :(得分:0)
尝试在初始化之后将“int cols = row.getLastCellNum();
”放入循环中,如
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++)
{
row = sheet.getRow(rowIndex);
cols = row.getLastCellNum();
....
}