Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
用phpexcel一次写一张纸_Php_Phpexcel - Fatal编程技术网

用phpexcel一次写一张纸

用phpexcel一次写一张纸,php,phpexcel,Php,Phpexcel,我正在使用phpexcel编写xlsx文件 它工作正常,只是我的内存不足 这是因为我在同一个文件中写入了两张工作表,都有15k+行 我想做的是 创建一张工作表,然后将其保存到文件中,或者在某个地方进行消毒,这样它就不会占用太多空间 创建下一张图纸 处理输出 有什么方法可以做到这一点吗?基本上: while(... have sheet 1 data...) { build sheet 1 } while(... have sheet 2 data...) { build sheet

我正在使用phpexcel编写xlsx文件

它工作正常,只是我的内存不足

这是因为我在同一个文件中写入了两张工作表,都有15k+行

我想做的是

创建一张工作表,然后将其保存到文件中,或者在某个地方进行消毒,这样它就不会占用太多空间

创建下一张图纸

处理输出

有什么方法可以做到这一点吗?

基本上:

while(... have sheet 1 data...) {
   build sheet 1
}

while(... have sheet 2 data...) {
  build sheet 2
}
而不是

while (... have data...) {
   add to sheet 1
   add to sheet 2
}

如果无法将整个电子表格保存在内存中,则必须增加内存限制。据我所知,PHPExcel和其他电子表格构建库不能使用磁盘上的表示,只能使用内存中的表示。

虽然PHPExcel被描述为“内存中”电子表格,并且受到PHP内存限制的限制,但可以通过使用单元缓存来减少所需的内存。该技术在开发人员文档(第4.2.1节)中有详细描述,可配置为压缩内存中的单元对象,或将单元数据缓存到内存缓存(如APC、Wincache或memcache)或磁盘。它可以减少多达60%的内存使用,尽管这是以速度为代价的。使用单元格缓存可能允许您在同一工作簿中创建两个工作表,而不会耗尽内存

如果要创建两个工作簿,每个工作簿有一个工作表,而不是一个工作簿有两个工作表,那么在开始构建第二个工作簿之前,您需要在保存第一个工作簿后从内存中刷新它。。。否则,您将节省很少的内存。由于工作簿对象中存在循环引用,因此在取消设置PHPExcel对象之前需要先中断这些引用。开发人员文档第4.3节对此进行了描述