PHPExcel导出大文件失败

我正在使用PHPExcel库来生成基于MySQL数据库的Excel数据。 MySql查询结果在1,34,000行。 Excel在一张工作表上支持65,536行。 所以制作了像

 foreach($ result为$ value)
 {
     $ val = array_values($ value);

    如果($ rowscounter <65000)
     {
         $ objPHPExcel-> addRow($缬氨酸,$ rowscounter);
     }
    其他
     {
         $ active_sheet ++;
         $ objPHPExcel-> createSheet()进行;
         $ objPHPExcel-> setActiveSheetIndex($ active_sheet);
         $ rowscounter = 1;
     }
     $ rowscounter ++;
 }
 //传递标题   
 header(“Content-Type:$ mtype; charset =”。$ objPHPExcel-> sEncoding);
标题(“内容types:应用程序/八位字节stream”);
 header(“Content-Disposition:inline; filename = \”“。$ filename。”。$ ext \“”);

 //将其保存为excel 2003文件
 $ objWriter = IOFactory :: createWriter($ objPHPExcel,$ objPHPExcel-> sFileFormat);
 //回声“峰值内存使用情况:”。  (memory_get_peak_usage(true)/ 1024/1024)。  “MB”;退出;
 $ objWriter->保存( 'PHP://输出');

在达到65000个logging后,创build新的工作表。

但是这是行不通的。 不给任何输出或错误。 起初我以为是因为内存限制。 但回显时,它显示峰值内存为1400.5 MB,并使用ini_set('memory_limit', '3500M');将内存限制设置为3500MB ini_set('memory_limit', '3500M');

你能提出一些build议吗?

你可能超过65,000的限制,你在$ rowscounter的初始值是什么? 1或0(零)? 我问这个数组结果从索引0(零)开始的原因,你添加行,然后在添加后递增计数器。 所以如果你在0(零)的时候启动计数器,那么你可能会有更多的行数。 另外,你在else语句中缺less一行,你循环一个值,但不要将它添加到表单中

尝试这个

 $rowscounter = 1; foreach($result as $value) { $val = array_values($value); if($rowscounter < 65000) { $objPHPExcel->addRow($val,$rowscounter); } else { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; // add missing row $objPHPExcel->addRow($val,$rowscounter); } $rowscounter++; } // deliver header header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); // Save it as an excel 2003 file $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB";exit; $objWriter->save('php://output'); 

一个简单的例子,我试图解释,如果$ i被设置为0(零)else条件不符合。 所以你会在结果中多出一行。 如果$ i被设置为1,则满足else条件

 $count = array(1,2,3,4,5,6,7,8,9,10); $i=1; // set this to 0 (zero) and test, set to 1 and test foreach($count as $cnt) { if($i < 10) { echo "If condition - Count value: ".$cnt." i value:".$i."<br />"; } else { echo "Else condition - Count value: ".$cnt." i value:".$i."<br />"; } $i++; }