Java 使用ApachePOI通过流/分页策略将xlsx文件解析为块

Java 使用ApachePOI通过流/分页策略将xlsx文件解析为块,java,out-of-memory,apache-poi,xlsx,xlsm,Java,Out Of Memory,Apache Poi,Xlsx,Xlsm,有一种情况是,xlsx、xlsm文件具有大量数据(约80-100MB),使用工作簿对象的load()方法(以FileInputStream为参数)在服务器上导致内存堆空间不足问题 其目的是加载数据,验证单元格内容,并在存在无效记录条目时报告错误。如果所有数据都正确,那么将其写入表中。因此,以下内容不足以满足我的目的 问题涉及分页解析、数据验证,然后写入数据库。由于xlsx文件是包含内容XML的zip格式,您可以通过简单的解析/丢弃来删除页面,创建较小的内容XML。然后创建一个较小的xlsx并使

有一种情况是,xlsx、xlsm文件具有大量数据(约80-100MB),使用工作簿对象的load()方法(以FileInputStream为参数)在服务器上导致内存堆空间不足问题

其目的是加载数据,验证单元格内容,并在存在无效记录条目时报告错误。如果所有数据都正确,那么将其写入表中。因此,以下内容不足以满足我的目的


问题涉及分页解析、数据验证,然后写入数据库。

由于xlsx文件是包含内容XML的zip格式,您可以通过简单的解析/丢弃来删除页面,创建较小的内容XML。然后创建一个较小的xlsx并使用apachepoi。使用测试xlsx来开发解析。XML通常没有换行或缩进;因此,XML美化器/树编辑器可能会有所帮助。Excel使用共享字符串,因此很难看到实际内容


使用zip文件系统(URL“jar:file://... .xlsx”)在xlsx上操作。

StAX解析器是解决这种情况的好方法。


我们可以在工作表上迭代以获取每个单元格的值索引,并使用SharedStringsTable对象获取特定单元格位置的值。

谢谢。我将以分而治之的方式尝试这个。