PHPExcel占用了太多的时间
我正在尝试使用PHPExcel生成Excel文件。一切都很好,但它需要太多的时间,我已经改变了最大执行时间和内存限制,但它仍然需要超过7分钟来执行20000 X 12(1.4M)。我必须生成大小为1000000 X 12的Excel。请给我一个解决方案,我不得不把我的问题搞砸了,忽略这一点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
//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