Apache POI和Null Pointer ... csv转换为xlsx

时间:2014-09-08 19:50:00

标签: java excel apache csv apache-poi

我正在使用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次。我猜它第一次破了。它只给出空指针异常及其发生的位置,该位置与上面的星号一致。

对不起,我对编程很陌生,所以我很无能为力

1 个答案:

答案 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);

否则,您必须决定在数据丢失时该怎么做。