2016-02-05 74 views
3

我試圖爲android創建一個非常基本的電子表格(XLS)查看器。 雖然使用Apache POI API創建一個新的XSSFWorkbook對象時,我收到了內存不足的錯誤:當在Android上用Apache poi讀取xls時內存不足

mWorkBook = new XSSFWorkbook(file); 

如何能抓住特定的行/細胞 .xls的內部,而不將整個文件加載到內存中?

+0

如何抓住特定的行/單元格?我認爲這個答案只是讀取整個文件。 – Habbert

+0

它讀取整個文件,但它不會將整個內容加載到內存中,並且可以關閉流而不讀取所有行。即一旦你閱讀了所需的行,你可以關閉它。查看Apache POI中的流媒體API。 http://poi.apache.org/spreadsheet/index.html – Samuel

+0

但它可以開始閱讀除第一行以外的其他地方嗎?如果我在文件中途需要連續行,該怎麼辦?閱讀整個文件到那一點,以獲得該行將無法正常工作。 – Habbert

回答

1

電子表格不適合隨機訪問。電子表格不是爲此目的設計的原因是因爲單元格可以是任意長的,並且行可以具有任意數量的單元格。如果不是這種情況,並且每行都有固定的字節大小,那麼您可以跳過讀取文件的第一個字節。

如果隨機訪問是您的主要用例,我會建議將數據加載到小型數據庫中。看看H2