使用Spout读取大体积Excel文件

Spout简介

使用phpExcel在读取体积较大的excel文件时,会提示Fatal error: Allowed memory size of的错误,提示内存不够。可以使用Spout来解决。

Spout 是一个 PHP 库,用于以快速且可扩展的方式读取和写入电子表格文件(CSV、XLSX 和 ODS)。它能够处理非常大的文件,同时保持非常低的内存使用率(小于 3MB)。
官方网站:
https://opensource.box.com/spout/
github地址:
https://github.com/box/spout

安装方法

通过composer或手动引入。
通过composer:

composer require box/spout

手动引入:

require_once '[PATH/TO]/src/Spout/Autoloader/autoload.php';

DEMO

use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;

$filePath = '/path/to/file.xlsx';
$reader = ReaderEntityFactory::createReaderFromFile($filePath);

$reader->open($filePath);

foreach ($reader->getSheetIterator() as $sheet) {
    //只取第一个sheet
    if($sheet->getIndex()>0) continue;
    foreach ($sheet->getRowIterator() as $row) {
        // do stuff with the row
        $cells = $row->getCells();
        $tmp = [];
        foreach ($cells as $k=>$cell){
            $value = $cell->getValue();
            if(strlen($value)>0) $tmp[$k+1] = $value;
        }
        var_dump($tmp);die;
    }
}

$reader->close();

发表评论

邮箱地址不会被公开。 必填项已用*标注