Apache POI - 在读取带有值的单元格时获取空指针

时间:2014-04-24 21:50:29

标签: java excel apache null apache-poi

我正在尝试读取一行中的一些单元格,前5页使用相同的读取代码是可以的,但是我的第6张表格在特定单元格中返回空值,即使单元格在电子表格中有值。 / p>

有没有人见过这个?怎么解决?

提前致谢!

PS:这是我用来获取值的代码,工作正常,直到达到第6张。我可以看到Excel电子表格已填满但仍然为空。

private String getValorTexto(HSSFSheet sheet, int indiceLinha, int indiceColuna) 
{              
    sheet.getRow(indiceLinha).getCell(indiceColuna).setCellType(HSSFCell.CELL_TYPE_STRING);
    if (sheet.getRow(indiceLinha).getCell(indiceColuna).getCellType() == HSSFCell.CELL_TYPE_STRING) {
        return sheet.getRow(indiceLinha).getCell(indiceColuna).getStringCellValue().trim();
    } else {
        return String.valueOf(sheet.getRow(indiceLinha).getCell(indiceColuna).getNumericCellValue());
    }
}

2 个答案:

答案 0 :(得分:2)

我想强制单元格类型为HSSFCell.CELL_TYPE_STRING可能是获取null的原因。

从任何类型的单元格(您可能还有日期,公式等)获取字符串值的更健壮的方法是使用DataFormatter

import org.apache.poi.ss.usermodel.DataFormatter;

static DataFormatter dataFormatter = new DataFormatter();

static String getStringValue(Cell cell) {
    return dataFormatter.formatCellValue(cell);
}

当您希望获得与Excel中显示的内容完全相同时(例如舍入到给定小数位的数字),它尤其有用。

答案 1 :(得分:0)

我在最近的测试中发现,由于未知原因,方法DateUtil.GetJavaDate(Double value)可以引发NullReferenceException。这是NPOI在调用cell.DateCellValue()时用于转换数字Excel日期的方法。我建议改用DateTime.FromOADate(cell.NumericCellValue)方法,该方法似乎执行相同的转换。