2016-05-05 98 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

您也可以通過計數器變量跳過迭代器。 –