如何使用Apache POI读取xlsx文件时处理空指针异常

时间:2016-05-05 12:14:47

标签: java excel nullpointerexception apache-poi xssf

我已经写了下面提到的用于读取excel文件的代码片段,这对于非空的excel文件工作正常,但对于excel文件,它正在抛出 NULLPOINTEREXCEPTION

    ArrayList<String> dataList = new ArrayList<String>();
    XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
    int rowNum = xssfSheet.getLastRowNum() + 1;
    int startRow = 0, startCol = 0, colNum;
    for (int r = startRow; r < rowNum; r++) {
        XSSFRow row = xssfSheet.getRow(r);
        colNum = xssfSheet.getRow(r).getLastCellNum();
        String data = "";
        for (int c = startCol; c < colNum; c++) {
            XSSFCell cell = row.getCell(c,XSSFRow.CREATE_NULL_AS_BLANK);
            data += cell.toString() + ", ";
        }
        dataList.add(data);
    }
    closeFile();

我在此行中为空文件获取异常: colNum = xssfSheet.getRow(r).getLastCellNum(); 问题是 getLastCellNum() 返回值为0表示没有记录,也表示没有记录。因此,在检索getLastCellNum()时,我得到空指针异常。

1 个答案:

答案 0 :(得分:0)

您应该使用rowIterator()和cellIterator()迭代行和列。

XSSFRow row; 
XSSFCell cell;
Iterator rows = sheet.rowIterator();
    while (rows.hasNext()){
        row=(XSSFRow) rows.next();
        Iterator cells = row.cellIterator();
        while (cells.hasNext())
        {
            cell=(XSSFCell) cells.next();
            cIndex=cell.getColumnIndex();
            data += cell.toString() + ", ";
        }
         dataList.add(data);
    }