【问题标题】:Parsing xlsx files as chunks via streaming/pagination strategy using apache poi使用 apache poi 通过流/分页策略将 xlsx 文件解析为块
【发布时间】:2015-09-24 14:33:13
【问题描述】:

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

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

Error While Reading Large Excel Files (xlsx) Via Apache POI

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

【问题讨论】:

    标签: java out-of-memory apache-poi xlsx xlsm


    【解决方案1】:

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

    使用 zip 文件系统(URLs “jar:file://....xlsx”)对 xlsx 进行操作。

    【讨论】:

    • 谢谢。我会以分而治之的方式试试这个。
    【解决方案2】:

    StAX 解析器是解决这种情况的好方法。 https://docs.oracle.com/javase/tutorial/jaxp/stax/index.html

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

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多