3

我知道,这里有很多关于提高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); 

没有成功

4

3 回答 3

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);
    .
    .
    .
}
于 2012-06-09T11:29:43.033 回答
2

在运行 parse() 之前尝试通过发出gc_disable(). 猜测这里的迭代级别没有被 PHP 正确优化。

于 2012-06-09T10:57:04.030 回答
2

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

例如:

$objReader = PHPExcel_IOFactory::createReader( 'Excel5' );
$objReader->setReadDataOnly( true );
于 2012-07-11T09:16:10.530 回答