我正在尝试使用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);
`