Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache POI-SXSSFWorkbook-阻止刷新的行_Apache_Excel_Apache Poi - Fatal编程技术网

Apache POI-SXSSFWorkbook-阻止刷新的行

Apache POI-SXSSFWorkbook-阻止刷新的行,apache,excel,apache-poi,Apache,Excel,Apache Poi,我有一个场景,我正在使用SXSSF工作簿(大约100-200万)创建一个非常大的xlsx文件 在写入工作表时,我必须动态填充一些值,例如仅在工作表的第1行中填充标题 问题: 由于它的流式api,如果我在第100000行,并且希望在第1行中填充一些值,那么此时我的第1行被刷新并尝试写入它的不可用 问题: 1.我能阻止任何一排人冲厕吗? 2.你能想出什么解决办法吗 我想保存行1的值,刷新整个工作簿,再次读取工作簿,创建行1,然后再次刷新 更好的解决方案请….很简单,你不能。SXSSF是文件格式的

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

  • 在写入工作表时,我必须动态填充一些值,例如仅在工作表的第1行中填充标题
问题: 由于它的流式api,如果我在第100000行,并且希望在第1行中填充一些值,那么此时我的第1行被刷新并尝试写入它的不可用

问题: 1.我能阻止任何一排人冲厕吗? 2.你能想出什么解决办法吗

我想保存行1的值,刷新整个工作簿,再次读取工作簿,创建行1,然后再次刷新


更好的解决方案请….

很简单,你不能。SXSSF是文件格式的流式写入程序。一旦一组行从缓冲区中传出,它们就会被写入磁盘,成为需要排序的文件格式。在这一点上,他们走了,不能改变,因为其他事情已经在他们之后

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


XSSFWorkbook
确实需要比
SXSSFWorkbook
更多的内存,因为它将整个文件保存在内存中。您可能需要增大堆的大小。不过,对于大多数事情来说,内存比程序员便宜得多,所以只需扔掉一些RAM就可以了

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

为您的服务器购买更多内存,然后使用常规的
XSSFWorkbook
,它允许同时对整个工作簿进行完全读/写访问?:)是的,我们可以,但现在我们没有增加的资源。任何人需要的任何想法pl?解决方案:-为了保持内存占用率低,不增加ram,不使用XSSF-我们最初将写入.csv文件,而实际上创建.XLSX时,我们将写入头行,并将记录从.csv复制到.XLSX文件。