2012-12-06 37 views
0

首先,下面的代碼已經運行一段時間沒有問題了。 我從一位同事那裏收到excel文件,我通過這個程序閱讀和上傳。 最近,同事被替換,我從另一個人收到文件。 我會和他一起檢查他的excel文件。Apache POI退出而沒有拋出異常

無論如何,我從新同事收到的第一個excel文件讓我感到沮喪。 以下代碼在WorkbookFactory.create(fis)調用中退出。沒有異常拋出 和程序直接進到finally條款等

try { 
     fis = new FileInputStream(f);    

     Workbook wb = WorkbookFactory.create(fis); 

     Sheet ws = wb.getSheetAt(0); 
     if (ws == null) { 
      throw new ParseException("No sheet found on index 0", 1); 
     } 

     Iterator rowIt = ws.rowIterator(); 

     while (rowIt.hasNext()) { 
      Row row = (Row) rowIt.next(); 
      if (row.getRowNum() != 0 && isArticleRow(row)) { 
       Article article = parseArticleData(row); 

       if (article != null) { 
        priceList.getArticles().add(article); 
       } 
      } 
     } 

     String vendorNumber = getVendorNumber(priceList); 
     priceList.setVendorNumber(vendorNumber); 

     priceList.setReadCorrectly(true); 
     System.out.println("DONE"); 

    } catch (Exception e) { 
     System.out.println(e.getMessage()); 

     _log.error(e.getMessage()); 
     if (priceList != null) { 
      priceList.setReadCorrectly(false); 
     } 

    } finally { 
     if (fis != null) { 
      fis.close(); 
     } 
     return priceList; 
    } 

我試圖調試,但我遇到相同的行爲,並沒有被拋出 例外,我不知道如何繼續。

在此先感謝您的意見。

+0

什麼使用調試器顯示你正在發生? ;) –

+0

不是一個乾淨的解決方案,但嘗試捕捉「Throwable」而不是異常,然後打印出來看看問題是什麼......最有可能的運行時錯誤正在拋出...... – Pushkar

+0

是的,謝謝,這實際上是所有我需要。它似乎有些poi xml罐子丟失。由於以前的同事使用不同的excel格式,poi從不需要xml庫。 – Treurwilg

回答

0

Catch Throwable,看看而不是例外。它應該工作。

} catch (Throwable e) { 
    System.out.println(e.getMessage()); 

    _log.error(e.getMessage()); 
    if (priceList != null) { 
     priceList.setReadCorrectly(false); 
    } 

} 
+0

是的,它的工作原理,我發現了異常,並抓到了一個classDefNotFound錯誤。看到我上面的評論,有些罐子丟失了。 非常感謝 – Treurwilg