我正在使用phpexcel来编写xlsx文件。
除了我的内存不足外,它工作正常。
这是因为我正在将两张纸写入同一个文件,两张都有15k +行。
我想做的是
创建一张工作表,并将其保存到文件中,或在某处清理,以免占用太多空间。
创建下一张表。
处理输出。
有没有办法做到这一点?
答案 0 :(得分:0)
基本上:
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和其他电子表格构建库不能用于磁盘表示,只能适用于内存。
答案 1 :(得分:0)
虽然PHPExcel被描述为“内存”电子表格,并受PHP内存限制的约束,但可以减少使用单元缓存所需的内存。此技术在开发人员文档(第4.2.1节)中有详细描述,可配置为压缩内存中的单元对象,或将单元数据缓存到内存缓存(如APC,Wincache或memcache)或磁盘。它可以将内存使用量减少多达60%,但速度会降低成本。使用单元格缓存可能允许您在同一工作簿中创建两个工作表,而不会耗尽内存。
如果要创建两个工作簿,每个工作表只有一个工作表,而不是一个包含两个工作表的工作簿,那么在开始构建第二个工作簿之前,需要先将内存中的第一个工作簿从内存中清除...否则你会节省很少的记忆。由于工作簿对象中的循环引用,您需要在取消设置PHPExcel对象之前中断这些引用。这在开发人员文档部分4.3
中有所描述