1

请帮助我解决将大数据导出为 excel 格式 xlsx 的问题。我一次将近 45000 条记录导出到单个文件,并且超时而不保存文件。mysql 选择查询执行该大数据需要 21 秒。下面是我使用 PHP Excel 库将数据导出到 Excel 文件的代码。

 $sql2 = "SELECT * FROM Surveys";
 $result2 = mysql_query($sql2);

while($row2 = mysql_fetch_assoc($result2))
{   
$j=$rowscounter+2;
$sheet->setCellValue("A$j",$row2['brandname']);
$sheet->setCellValue("B$j",$row2['productname']);
$sheet->setCellValue("C$j",$row2['sname']);
$sheet->setCellValue("D$j",$row2['smobile']);
$sheet->setCellValue("E$j",$row2['semail']);
$sheet->setCellValue("F$j",$row2['country']);
$sheet->setCellValue("G$j",$row2['city']);
$sheet->setCellValue("H$j",$row2['sdob']);
$sheet->setCellValue("I$j",$row2['age']);
$sheet->setCellValue("J$j",$row2['comment']);
$sheet->setCellValue("K$j",$row2['outletcode']);
$sheet->setCellValue("L$j",$row2['username']);
$sheet->setCellValue("M$j",$row2['datetime']);
$sheet->setCellValue("N$j",$row2['duration']);  
$rowscounter++;
}

 // Rename worksheet
 $sheet->setTitle('Survey-Report');    
 $objPHPExcel->setActiveSheetIndex(0);
 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
 $objWriter->setPreCalculateFormulas(false);
 unlink("Survey-Report.xlsx");
 $objWriter->save('Survey-Report.xlsx');
 echo "ok";

更新:

我忘了提到我已经尝试过 set_timout 等,并在我的 php 文件中编写了以下代码。

set_time_limit(0);
ini_set('memory_limit','2500M');
4

2 回答 2

1

您可以将其添加到脚本的顶部:

set_time_limit (0);

这将禁用默认的 30 秒 php 超时。

或者您可以添加自定义秒数,请参阅set_time_limit()

于 2013-04-26T15:33:43.363 回答
0

我遇到了同样的问题,我在使用 PHPExcel 导出记录时不断收到 504 网关超时。我也试过set_time_limit(0)没有成功。我最终做的是更改 apache 超时。

您可以timout在 httpd.conf 文件中找到它。

希望能帮助到你!

于 2017-10-12T13:46:03.297 回答