背景: 利用phpspreadsheet可以輕鬆的解析excel文件,但是phpspreadsheet的記憶體消耗也是比較大的,我試過解析將近5M的純文字excel記憶體使用量就會超過php預設的最大記憶體128M。 當然這可以用調節記憶體大小的方法來解決,但是在併發量大的時候就比較危險了。所以今天介紹下第 ...
背景:
利用phpspreadsheet可以輕鬆的解析excel文件,但是phpspreadsheet的記憶體消耗也是比較大的,我試過解析將近5M的純文字excel記憶體使用量就會超過php預設的最大記憶體128M。
當然這可以用調節記憶體大小的方法來解決,但是在併發量大的時候就比較危險了。所以今天介紹下第二種方法,利用phpspreadsheet對excel文件進行切割,這是個拿時間換空間的方法所以一般對時效性要求低的需求可以使用。
方法:
先放個phpspreadsheet官網提供的一個功能readCell,我們就可以利用這個功能來進行切割。
首先對excel文件進行預讀,主要是獲取所有的工作表以及工作表下麵的數據行數,這個階段readCell方法一直返回的都是false,我們只需要記錄readCell進來的工作表及數據行數。
然後就是對獲取到的記錄進行分析,確定每部分數據需要裝多少行原始excel的數據,需要註意的是為了避免內容混淆,不要講兩個工作表的內容切到一起。
最後就是迴圈分析的數據和再次利用readCell獲取每部分數據,註意每次讀取文件後都要利用disconnectWorksheets方法清理phpspreadsheet的記憶體。
經過我自己的測試發現,利用該方法解析5M的excel文件,平均只需要21M的記憶體就可以搞定!
代碼
https://github.com/wangyelou/Tools/tree/master/CutExcel