2016-02-05 71 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