首页 >后端开发 >php教程 >如何优化 PHPExcel 以防止加载大型 XLSX 文件时内存耗尽?

如何优化 PHPExcel 以防止加载大型 XLSX 文件时内存耗尽?

Susan Sarandon
Susan Sarandon原创
2024-11-19 13:58:02590浏览

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