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