在使用 Workbook 对象的 load() 方法(该方法以 FileInputStream 作为参数)时,具有大量数据(大约 80-100MB)的 xlsx、xlsm 文件会导致服务器上的内存堆空间不足问题。
它旨在加载数据,验证单元格内容并在记录无效的情况下报告错误。如果所有数据都正确,则将其写入表中。因此,以下内容不足以满足我的目的。
通过 Apache POI 读取大型 Excel 文件 (xlsx) 时出错
该问题涉及分页解析、数据验证以及然后写入数据库。
在使用 Workbook 对象的 load() 方法(该方法以 FileInputStream 作为参数)时,具有大量数据(大约 80-100MB)的 xlsx、xlsm 文件会导致服务器上的内存堆空间不足问题。
它旨在加载数据,验证单元格内容并在记录无效的情况下报告错误。如果所有数据都正确,则将其写入表中。因此,以下内容不足以满足我的目的。
通过 Apache POI 读取大型 Excel 文件 (xlsx) 时出错
该问题涉及分页解析、数据验证以及然后写入数据库。
由于 xlsx 文件是包含内容 XML 的 zip 格式,因此您可以通过简单的解析/丢弃来删除页面,从而创建更小的内容 XML。然后创建一个较小的 xlsx 并使用 Apache POI。使用测试 xlsx 来开发解析。XML 通常没有换行符或缩进;所以 XML 美化器/树编辑器可能会有所帮助。Excel 使用共享字符串,因此很难看到实际内容。
使用 zip 文件系统(URLs “jar:file://....xlsx”)对 xlsx 进行操作。
StAX 解析器是解决这种情况的好方法。 https://docs.oracle.com/javase/tutorial/jaxp/stax/index.html
我们可以遍历工作表以获取每个单元格的值索引,并使用 SharedStringsTable 对象来获取特定单元格位置的值。