1

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

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

通过 Apache POI 读取大型 Excel 文件 (xlsx) 时出错

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

4

2 回答 2

2

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

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

于 2015-09-24T14:43:07.357 回答
0

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

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

于 2015-11-24T11:36:01.157 回答