[英]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.