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 に答える