首頁 >後端開發 >php教程 >如何優化 PHPExcel 以防止載入大型 XLSX 檔案時記憶體耗盡?

如何優化 PHPExcel 以防止載入大型 XLSX 檔案時記憶體耗盡?

Susan Sarandon
Susan Sarandon原創
2024-11-19 13:58:02708瀏覽

How Can I Optimize PHPExcel to Prevent Memory Exhaustion When Loading Large XLSX Files?

PHPExcel 在載入大型電子表格時會導致記憶體過載

儘管分配了1024MB RAM,PHPExcel 在載入3MB XSLX 檔案時仍然會遇到記憶體耗盡的情況。根本原因在於表示大型電子表格所涉及的記憶體密集型過程。

最佳化PHPExcel 記憶體使用

要解決此問題,可以採用多種最佳化技術:

選擇性工作表載入

如果只需要載入特定工作表,請使用setLoadSheetsOnly() 限制讀者讀取的工作表數量。

$objReader->setLoadSheetsOnly([
    'Data Sheet #1',
    'Data Sheet #3'
]);

讀取過濾器

要僅檢索特定的單元格或行,可以使用讀取過濾器。

class MyReadFilter implements PHPExcel_Reader_IReadFilter {
    // ... implementation
}

$objReader->setReadFilter(new MyReadFilter());

分塊

分塊讀取大型電子表格可以透過僅載入部分資料來最大限度地減少記憶體佔用

$chunkSize = 20;
$chunkFilter = new chunkReadFilter();

for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) {
    $chunkFilter->setRows($startRow, $chunkSize);
    $objPHPExcel = $objReader->load($inputFileName);
}

只讀取資料

將readDataOnly 設為true 只載入單元格值而不格式化數據,減少記憶體使用。

$objReader->setReadDataOnly(true);

單元格快取

單元格快取以壓縮格式儲存單元格對象,顯著減少記憶體消耗,但會犧牲速度。

替代方法

不要使用迭代器和手動建立數組,請考慮使用 PHPExcel 的 toArray () 或 rangeToArray() 方法可有效產生數組。

以上是如何優化 PHPExcel 以防止載入大型 XLSX 檔案時記憶體耗盡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn