2016-05-05 69 views
0

我已经写了下面的代码中提到片断进行读取Excel文件XLSX文件,这是工作的罚款对于非空的Excel文件,但对于Excel文件被扔NullPointerException异常如何处理空指针异常而阅读使用Apache POI

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()我得到空指针异常。

+0

我知道如何处理空指针异常,但对于xlsx文件我没有办法处理。 –

回答

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); 
    } 
+0

我没有使用迭代器b'coz,如果我必须在跳过顶部的几行后​​读取文件,那么它会产生问题。 –

+0

您也可以通过计数器变量跳过迭代器。 –