2016-08-16 23 views
0

私は助けが必要です、私は10から30列と20000以上の行を持つ多くのレポートを持っています、miドライバはmongodbであり、結果クエリは非常に高速ですが、 5または10分約遅すぎるか、いくつかの時間以上、私のコードは一つだけbucleありますphpExcelをエクスポートする時間を短縮

$row++; 
    $contUser = 0; 
    foreach ($data as $index => $objUser) { 
     $backgroundColor = $colorOdd; 
     if ($contUser % 2 == 0) { 
      $backgroundColor = $colorPair; 
     } 
     $field = $objUser->getFields(); 
     $column = 0; 
     //case 'N°': 
     $sheet->setCellValueByColumnAndRow($column, $row, $contUser + 1); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 

     $column++; 
     //case matricula: 
     $sheet->setCellValueByColumnAndRow($column, $row, $objUser->getChrUsername()); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     //case matricula: 
     $sheet->setCellValueByColumnAndRow($column, $row, $field['appaterno']['value']); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     //case matricula: 
     $sheet->setCellValueByColumnAndRow($column, $row, $field['apmaterno']['value']); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     //case matricula: 
     $sheet->setCellValueByColumnAndRow($column, $row, $objUser->getChrFirstname()); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 

     //$field['dni']['value'] 
     $column++; 
     $type = PHPExcel_Cell_DataType::TYPE_STRING; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['dni']['value'], $type); 
     //$sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     //$field['sociedad']['value'] 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['sociedad']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['gerenciacentral']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['division']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['area']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['servicio']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['funcion']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['fecha']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['divpersonal']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['subpersonal']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['superior']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['matsuperior']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['estado']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['iniestado']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($field['finestado']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($objUser->getChrEmail(), $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit(empty($field['agencia']['value'])?'':$field['agencia']['value'], $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 

     $date = ''; 
     $time = ''; 
     if(!empty($this->lastAccessQuiz) && $this->lastAccessQuiz>0){ 
      $date = date("Y-m-d", $this->lastAccessQuiz); 
      $time = date("H:i:s", $this->lastAccessQuiz); 
     } 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($date, $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $column++; 
     $sheet->getCellByColumnAndRow($column, $row)->setValueExplicit($time, $type); 
     $sheet->getColumnDimensionByColumn($column)->setAutoSize(true); 
     $sheet->getStyleByColumnAndRow($column, $row)->applyFromArray($styleArray); 
     $sheet->getStyleByColumnAndRow($column, $row)->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID, 'startcolor' => array('rgb' => $backgroundColor))); 
     $row++; 
     $contUser++; 
    } 
+0

ストレートな回答はここではできませんが、私は大量のデータをたくさんインポートしていますが、20000+行のものは5〜20分の時間です。あなたのスクリプトを遅くするボトルネックがあれば、それらを見つけなければなりません。トピック:cachgrindとxdebugなど... – JustOnUnderMillions

答えて

0

まあ、列のスタイル設定しないと起動するすべての単一のセルの(などをsetAutoSizing真)はあなたすべてのデータを書き込み、その列に自動サイズ変更を適用します。

セルスタイルと同様に、それらはすべて同じですので、個々のセルには適用しないでください。個々のセルの書き込みが完了したら、全範囲に適用してください。 行の背景色ですが、行範囲に適用されますが、すべての個別のセルに適用されるわけではありません。

関連する問題