【问题标题】:Out of memory when reading xls with Apache poi on Android [duplicate]在Android上使用Apache poi读取xls时内存不足[重复]
【发布时间】:2016-05-15 14:50:01
【问题描述】:

我正在尝试为 Android 创建一个非常基本的电子表格 (XLS) 查看器。 在使用 Apache poi API 时,我在创建新的 XSSFWorkbook 对象时出现内存不足错误:

mWorkBook = new XSSFWorkbook(file);

如何在不将整个文件加载到内存的情况下获取 .xls 中的特定行/单元格

【问题讨论】:

  • 如何抓取特定的行/单元格?我认为这个答案只是读取整个文件。
  • 它读取整个文件,但它不会将整个文件加载到内存中,并且您可以关闭流而不读取所有行。 IE。一旦您阅读了所需的行,您就可以关闭它。查看 Apache POI 中的流式处理 API。 poi.apache.org/spreadsheet/index.html
  • 但是它可以从第一行以外的其他地方开始读取吗?如果我在文件中途需要一行怎么办?读取整个文件以获取该行将无法正常工作。
  • 电子表格并非设计为以这种方式访问​​。您必须在文件格式的限制范围内处理它们。如果您需要快速随机读取访问,我建议将数据加载到索引存储(如数据库)中。

标签: java android out-of-memory apache-poi


【解决方案1】:

电子表格不适合随机访问。电子表格不是为此目的而设计的原因是单元格可以任意长,并且行中可以包含任意数量的单元格。如果不是这种情况,并且每一行的字节大小都是固定的,那么您可以直接跳过读取文件的第一个 (ROWSIZE * INDEXOFROW) 字节。

如果随机访问是您的主要用例,我建议将数据加载到小型数据库中。看看H2

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2019-05-08
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多