PHPExcel花费了太多时间

时间:2017-02-17 21:10:54

标签: php excel phpexcel

我正在尝试使用PHPExcel生成Excel文件。一切都很好但是花了太多时间,我已经改变了max_execution_time和memory_limit但是它仍然需要超过7分钟来执行20000 X 12(1.4M)。我必须生成尺寸为1000000 X 12的Excel。请给我一个解决方案,我不得不搞砸我的查询而忽略它。

//include files
           `ini_set('max_execution_time', 600);
            ini_set('memory_limit', '128M');
            error_reporting(E_ALL); ini_set('display_errors', 1); 
            include_once "../CMSWebService/config.php";
            include 'PHPExcel/PHPExcel/IOFactory.php';
            include 'PHPExcel/PHPExcel.php';

 //Query 

                $query = "SELECT SQL_CALC_FOUND_ROWS LastUpdate AS `Date`, partnres.PartnerIVRID AS PartnerIVRID, partnres
            .Category AS Category, partnres.BATPartnerCode AS BATPartnerCode
                , partnres.OutletName AS OutletName, partnres.RetailerName AS RetailerName,  partnres.Region AS Region
            , partnres.Area AS Area
            , partnres.Territory AS Territory, partnres.TSALocation AS TSALocation, partnres.PartnerManagerNumber
             AS PartnerManagerNumber, product.Compliance_Status AS Compliance_Status
             FROM tbl_partners AS partnres JOIN tbl_partner_compliance_info AS product
             ON product.PartnerIVRID = partnres.PartnerIVRID  

             UNION
            SELECT LastUpdate AS `Date`,partnres.PartnerIVRID AS PartnerIVRID, partnres.Category AS Category, partnres
            .BATPartnerCode AS BATPartnerCode
            , partnres.OutletName AS OutletName, partnres.RetailerName AS RetailerName, partnres.Region AS Region, partnres.AREA AS Area,
            partnres.Territory AS Territory, partnres.TSALocation AS TSALocation, partnres.PartnerManagerNumber
             AS PartnerManagerNumber,product.Compliance_Status AS Compliance_Status
            FROM tbl_partners AS partnres JOIN tbl_partner_products_info AS product ON product.PartnerIVRID= partnres
            .PartnerIVRID ORDER BY `Date` ASC LIMIT 0,20000"; 


             $res = Sql_exec($remoteCN,$query);

 //Excel
            $objPHPExcel = new PHPExcel();
            $objPHPExcel->setActiveSheetIndex(0);
            $rowCount = 1;
            $customTitle = array ('Date','PartnerIVRID','Category','BATPartnerCode','OutletName','RetailerName','Region','Area','Territory','TSALocation','PartnerManagerNumber','Status');
            $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $customTitle[0]);
            $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $customTitle[1]);
            $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $customTitle[2]);
            $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $customTitle[3]);
            $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $customTitle[4]);
            $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $customTitle[5]);
            $objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount, $customTitle[6]);
            $objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount, $customTitle[7]);
            $objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount, $customTitle[8]);
            $objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount, $customTitle[9]);
            $objPHPExcel->getActiveSheet()->SetCellValue('K'.$rowCount, $customTitle[10]);
            $objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount, $customTitle[11]);

            $rowCount=2;
            while($row = Sql_fetch_assoc($res)){
                $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['Date']);
                $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['PartnerIVRID']);
                $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['Category']);
                $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['BATPartnerCode']);
                $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['OutletName']);
                $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['RetailerName']);
                $objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount, $row['Region']);
                $objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount, $row['Area']);
                $objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount, $row['Territory']);
                $objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount, $row['TSALocation']);
                $objPHPExcel->getActiveSheet()->SetCellValue('K'.$rowCount, $row['PartnerManagerNumber']);
                $objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount, $row['Compliance_Status']);
                $rowCount++;
            }
            $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
            $name = 'BAT_REPORT_'.date('Y-m-d H:i:s').'.xlsx';
            $objWriter->save("$name");

            $file_location = $name;
 //Download
            header('Content-disposition: attachment; filename="'.$name);
            header('Content-type: application/xlsx');
            header('Content-Length: ' . filesize($file_location));
            readfile($file_location);


        `

0 个答案:

没有答案