PHPExcel占用了太多的时间

PHPExcel占用了太多的时间,php,excel,phpexcel,Php,Excel,Phpexcel,我正在尝试使用PHPExcel生成Excel文件。一切都很好,但它需要太多的时间,我已经改变了最大执行时间和内存限制,但它仍然需要超过7分钟来执行20000 X 12(1.4M)。我必须生成大小为1000000 X 12的Excel。请给我一个解决方案,我不得不把我的问题搞砸了,忽略这一点 //include files `ini_set('max_execution_time', 600); ini_set('memory_limit', '128

我正在尝试使用PHPExcel生成Excel文件。一切都很好,但它需要太多的时间,我已经改变了最大执行时间和内存限制,但它仍然需要超过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);


        `

20000 X 12
1000000 X 12
什么?数据行?您知道xlsx文件在每个工作表中的行数限制为100万行吗?PHPExcel本质上非常慢。我可以建议使用CSV或使用其他工具生成Excel文件,并且只使用PHP为其进行输入;考虑使用PHPExcel的<代码> FROMARRAY()/Case>方法来编写每一行,而不是单独写入每一个单元格,因为您所写的全部是原始数据,没有格式或样式或花式公式等;考虑一个更简单的格式,如CSV4.4,<代码>应用程序/XLSX < /代码>不是一个有效的内容类型…code>xlsx文件是
application/vnd.openxmlformats of icedocument.spreadsheetml.sheet
20000 X 12
1000000 X 12
什么?数据行?您知道xlsx文件在每个工作表中的行数限制为100万行吗?PHPExcel本质上非常慢。我可以建议使用CSV或使用其他工具生成Excel文件,并且只使用PHP为其进行输入;考虑使用PHPExcel的<代码> FROMARRAY()/Case>方法来编写每一行,而不是单独写入每一个单元格,因为您所写的全部是原始数据,没有格式或样式或花式公式等;考虑一个更简单的格式,如CSV4.4,<代码>应用程序/XLSX < /代码>不是一个有效的内容类型…code>xlsx文件是
application/vnd.openxmlformats oficedocument.spreadsheetml.sheet