2017-08-18 155 views
0

我對於使用Android進行編程相當新,並且正在尋找一些幫助,我正在閱讀當前包含30張工作表的讀取和excel文件。當HSSFWorkbook讀取文件時,可能需要10到20秒才能繼續運行應用程序。有什麼辦法可以改善嗎?每張紙包含40行和13列。我現在一次只查找一張特定的表格,所以我不需要等到稍後再打電話。HSSFWorkbook讀取性能很慢

我不能使用XSSF要麼是由於問題javax.xml.stream

HSSFWorkbook wb = new HSSFWorkbook(pfile); 

     trimDate(); 
     HSSFSheet sheet; 
     sheetD = wb.getSheetIndex(finalDate); 
     sheet = wb.getSheetAt(sheetD); 
     FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 
     // TODO: 8/16/2017 remove try when current Excel File is used 
     Row row = null; 
     try{row = sheet.getRow(2);} 
     catch (NullPointerException e){ 
      error(); 
      e.printStackTrace(); 
      return; 
     } 
     Cell cell = row.getCell(11); 
     TextView pt = (TextView) findViewById(R.id.period_total); 
     CellValue cellValue = evaluator.evaluate(cell); 
+0

您是否嘗試閱讀[以及關於內存和性能的此POI faq條目](http://poi.apache.org/faq.html#faq-N10165)? – Gagravarr

回答

0

您可以嘗試使用SXSSFWorkbook相反,它正常工作與大的Excel工作表,因爲它沒有整個足跡存儲在內存中。 Here's所述的它的文檔:

SXSSF是XSSF的API兼容流擴展時 非常大的電子表格必須生產中使用,和堆空間是 有限。 SXSSF通過限制滑動窗口內的行訪問 ,而XSSF允許訪問文檔中的所有行的 ,從而實現低內存佔用。在窗口 中不再存在的較舊的行在寫入磁盤時變得無法訪問。

因爲這不會將整個文件存儲在內存中,所以您可能需要稍微調整一下邏輯,因爲一旦讀取了內容,您將無法返回到任何以前的行。

Here是使用SXSSFWorkbook讀取文件的示例。

+0

我還沒有能夠獲得XSSF的工作。我在javax.xml.stream 上得到了一個類錯誤,但是我不能實現它,原因是我還沒弄明白 –