簡體   English   中英

在phpexcel中一次寫一張紙

[英]write one sheet at a time in phpexcel

我正在使用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節對此進行了描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM