我正在使用Apache poi来解析Excel 2010文件。我有一个csv文件,其内容与我的一个excel文件相同。我在excel中打开了我的csv文件并将其保存为Excel工作簿,认为它应该在我编写的程序中工作,但我一直得到空指针异常。这些发生在代码行上,当给定行号和列号时,这些代码行查找文件中的单元格。我还没有找到这些空指针的原因,它在我的常规excel文件上完全正常。它只是该文件以前是一个csv文件?
我正在使用XSSF Usermodel
这是失败的地方
RPCManager rpc = new RPCManager(
sheet.getRow(row).getCell(indexes.name).toString(),
sheet.getRow(row).getCell(indexes.status).toString(),
sheet.getRow(row).getCell(indexes.customer).toString(),
sheet.getRow(row).getCell(indexes.site).toString(),
sheet.getRow(row).getCell(indexes.suite).toString(),
sheet.getRow(row).getCell(indexes.pod).toString(),
sheet.getRow(row).getCell(indexes.amps).toString(),
sheet.getRow(row).getCell(indexes.pp1).toString(),
** sheet.getRow(row).getCell(indexes.pp2).toString(), **
sheet.getRow(row).getCell(indexes.pp3).toString(),
sheet.getRow(row).getCell(indexes.cab).toString(),
sheet.getRow(row).getCell(indexes.rpcNum).toString(),
sheet.getRow(row).getCell(indexes.rpcPan).toString(),
sheet.getRow(row).getCell(indexes.rpcBr).toString(),
row);
" indexes.whatever"只是列的索引,行是行
这是程序的一小部分,它将信息放在excel文件中并写入XML文件。 Excel文件有2500-3000行,并吐出大约70个XML文件。上面的代码将excel文件中所需的信息保存到类中。这部分代码大约被调用2500次。我猜它第一次破了。它只给出空指针异常及其发生的位置,该位置与上面的星号一致。
对不起,我对编程很陌生,所以我很无能为力
答案 0 :(得分:0)
出现空指针,因为工作表中该行/列位置没有任何内容。在尝试获取之前,您需要明确验证其中是否有一个单元格。
如果单元格为空,您的操作完全取决于RPCManager
处理丢失数据的方式。如果它可以处理空值,那么类似下面的内容可能会起作用:
int[] cellNums = {indexes.name, indexes.status, ... ,indexes.rpcBr};
String[] cellVals = new String[cellNums.length];
XSSFRow r = sheet.getRow(row);
for (int i=0; i<cellNums; i++)
{
XSSFCell c = r.getCell(cellNums[i]);
cellVals[i] = c == null ? null : c.toString();
}
RPCManager rpc = new RPCManager(
cellVals[0],
cellVals[1],
...
cellVals[13],
row);
否则,您必须决定在数据丢失时该怎么做。