PHPExcel读取速度太慢

时间:2012-06-09 10:51:09

标签: php performance phpexcel

我知道,这里有很多问题需要改进PHPExcel表现。但所有这些都是关于数据,我的问题是阅读

我的功能:

function parse($filename){
    $objPHPExcel = PHPExcel_IOFactory::load($filename); 
    $activeSheet = $objPHPExcel->getActiveSheet();
    $parsedData = array();
    $columnHeaders = array('order', 'ts', 'summ', 'name', 'quant', 'price', 'bccu');
    foreach ($activeSheet->getRowIterator() as $rkey => $row) {
        $cellIterator = $row->getCellIterator();
        foreach ($cellIterator  as $ckey => $cell) {
            $parsedData[$columnHeaders[$ckey]] = $cell->getCalculatedValue();
        }
    }
    return $parsedData;
}

该文件包含~300行和7列。这个脚本无法在30秒内运行。

我该如何改进?

修改

使用

$objReader = PHPExcel_IOFactory::createReader("Excel2007");
$objPHPExcel = $objReader->load($filename); 

没有成功

3 个答案:

答案 0 :(得分:4)

如果已经定义了列,那么删除列迭代器呢?

尝试这样的事情:

foreach ($activeSheet->getRowIterator() as $rkey => $row) {
    $rowIndex = $row->getRowIndex ();
    $parsedData[$rowIndex]['order'] = $activeSheet->getCell('A' . $rowIndex);
    $parsedData[$rowIndex]['ts']    = $activeSheet->getCell('B' . $rowIndex);
    $parsedData[$rowIndex]['summ']  = $activeSheet->getCell('C' . $rowIndex);
    .
    .
    .
}

答案 1 :(得分:2)

尝试通过发出gc_disable()来运行parse()之前禁用垃圾收集器。猜测这里的迭代级别没有被PHP正确优化。

答案 2 :(得分:1)

如果您不打算更改文件的内容;将阅读器设置为只读可以提供大约10倍的提升。

例如:

$objReader = PHPExcel_IOFactory::createReader( 'Excel5' );
$objReader->setReadDataOnly( true );