如何在Android应用程序中读取大型Excel文件?

时间:2019-11-09 20:23:51

标签: android excel file inputstream

我的应用程序从Room中上载的excel文件中保存数据,然后在选定列(由用户)中搜索关键字,然后显示具有该关键字的单元格的所有行。

它成功读取了小的Excel文件,但是如果我在此行上载了2 Mb以上的文件,则会卡住

Workbook myWorkBook = WorkbookFactory.create(inputStream);

此错误详细信息..

 java.lang.OutOfMemoryError
Failed to allocate a 40 byte allocation with 32 free bytes and 32B until OOM, max allowed footprint 402653184, growth limit 402653184

我按照这个http://blog.kondratev.pro/2015/08/reading-xlsx-on-android-4-and-hopefully.html进行了编码。

请问如何解决?

感谢

2 个答案:

答案 0 :(得分:1)

检查this库以解析大型xlsx文件。完整文档为here

只需添加

repositories {
        maven {
            url "https://jitpack.io"
        }
    }

还有

implementation 'com.github.kiranbjm:xlsxparser:1.01'

到您的应用程序级别Gradle文件

,您可以将其与

一起使用
InputStream is = new FileInputStream(new File("/path/to/workbook.xlsx"));
Workbook workbook = StreamingReader.builder()
        .rowCacheSize(100)    // number of rows to keep in memory (defaults to 10)
        .bufferSize(4096)     // buffer size to use when reading InputStream to file (defaults to 1024)
        .open(is);            // InputStream or File for XLSX file (required)

答案 1 :(得分:0)

尝试在AndroidManifest.xml的android:largeHeap="true"标签中添加<application>。但是,如果这是针对分发给用户的应用程序,则应考虑其他方法。大多数人不会欣赏您的应用占用了设备的全部内存。最好是使用基于服务器的解决方案来解析文件,并让查询仅显示显示结果所需的数据。