Apache POI- SXSSFWorkbook - 阻止一行刷新

时间:2013-05-16 22:05:49

标签: apache excel apache-poi

我有一个场景,我正在使用SXSSF工作簿创建一个非常大的xlsx文件(大约1-2百万)。

  • 在写入工作表时,我必须动态填充一些值,例如仅在工作表的第1行中显示标题

问题:  由于它的流式传输api,如果我在第100000行,并且想要在Row1中填充一些值,那么此时我的第1行被刷新并尝试写入它不可用。

问题: 我可以阻止任何一排冲洗吗? 2.你能想到的任何解决方案吗?

我正在考虑保存Row1值,刷新整个工作簿,再次读入工作簿,创建Row1并再次刷新。

更好的解决方案请....

2 个答案:

答案 0 :(得分:2)

很简单,你做不到。 SXSSF是文件格式的流编写器。一旦一组行从缓冲区中传出,它们将被写入磁盘,成为需要排序的文件格式。那时,它们已经消失了,不能改变,因为其他事情已经发生了。

如果您需要对整个工作簿具有完全读/写权限,则需要切换到功能齐全的XSSFWorkbook。这会缓冲内存中的所有内容,因此您可以根据需要更改您喜欢的任何部分,因为它只会在写入文件时排序。

XSSFWorkbook确实需要比SXSSFWorkbook更多的内存,因为它将整个文件保存在内存中。您可能需要提高堆大小。但是对于大多数情况来说,内存比程序员便宜得多,所以只需要更多内存!

答案 1 :(得分:0)

解决方案可以满足任何人的需要: - 为了保持内存占用率低,不增加内存,不使用XSSF - 我们最初写入.csv文件而不是写入XLSX,而实际创建.xlsx时我们正在编写标题行并将记录从.csv复制到.xlsx文件。