在phpexcel中一次写一张

时间:2011-04-06 01:14:59

标签: php phpexcel

我正在使用phpexcel来编写xlsx文件。

除了我的内存不足外,它工作正常。

这是因为我正在将两张纸写入同一个文件,两张都有15k +行。

我想做的是

创建一张工作表,并将其保存到文件中,或在某处清理,以免占用太多空间。

创建下一张表。

处理输出。

有没有办法做到这一点?

2 个答案:

答案 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

中有所描述