我一直在使用Apache POI来处理来自大文件的数据。读取是通过SAX事件API完成的,这使得它可以在不消耗大量内存的情况下高效处理大型数据集。
但是,我还需要更新最终报告的现有模板。此模板可能超过10MB(在某些情况下甚至为20MB)。
您是否知道有效更新大模板文件(xslx)的方法?目前我正在将模板的全部内容读入内存并修改这些内容(使用POI中的XSSF)。我当前的方法适用于小文件(小于5 MB),但对于较大的文件,它会因内存不足异常而失败。
Java中是否有解决方案? (不一定使用Apache POI)首选开源/免费解决方案,但只要价格合理,商业也很好。
谢谢,
尤利安
答案 0 :(得分:1)
对于大型电子表格处理,建议使用SXSSF
就我所能想到的而言,与HSSF和XSSF相比,Streaming类有点慢,但在内存管理方面更为优越(可以随意纠正我)。
答案 1 :(得分:0)
您面临的消息很可能是关于堆空间(java.lang.OutOfMemoryError:Java堆空间),当您尝试将更多数据添加到内存中的堆空间区域时会触发该空间,但此大小数据大于JVM在Java堆空间中可容纳的数据。在许多情况下,通过指定(或更改如果存在)-Xmx参数来增加堆大小是很好的,类似于以下内容:
-Xmx1024m
答案 2 :(得分:0)
这个人创建了一些可以读取Xlsx文件并用XML处理它们的类。它返回一个带有字符串的数组,这些字符串实际上是Xlsx文件的行。
然后,您可以使用这些数组在流中逐行加载它们,而不是一次性加载它们。