【发布时间】:2011-04-22 20:41:47
【问题描述】:
我正在使用 PHPExcel 库来生成基于 mysql 数据库的 excel 数据。 MySql 查询结果为 1,34,000 行。 Excel 在一张工作表上支持 65,536 行。所以让逻辑像
foreach($result 作为 $value) { $val = array_values($value); 如果($rowscounter addRow($val,$rowscounter); } 别的 { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; } $行计数器++; } // 传递头部 header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); // 保存为 excel 2003 文件 $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "内存使用峰值:" . (memory_get_peak_usage(true) / 1024 / 1024) 。 "MB";退出; $objWriter->save('php://output');在一个工作表达到 65000 条记录后创建新工作表。
但它不起作用;不给出任何输出或错误。最初我认为是因为内存限制。但是当回显时,它显示峰值内存为 1400.5 MB,我使用 ini_set('memory_limit', '3500M'); 将内存限制设置为 3500MB
您能否提出一些建议或替代方案?
【问题讨论】:
-
您能概括一下您对 PHPExcel 所做的更改吗?您正在引用诸如 $objPHPExcel->addRow() 之类的方法(我希望它与工作表而不是工作簿相关联)和诸如 $objPHPExcel->sFileFormat 之类的属性,它们不是 PHPExcel 库代码的一部分。
-
您是否尝试过调试以确定它是在 foreach() 循环中失败,还是在尝试写入文件时失败?
-
是的,马克,$objPHPExcel->addRow() 是我的函数,它只是使用 ->getActiveSheet()->setCellValueByColumnAndRow();
-
是的 $objPHPExcel->sFileFormat 不是 PHPExcel 的一部分。它的自定义变量。以上代码可完美处理 10,000 条记录。
-
您认为这不是内存 - 虽然我的经验估计是每个单元格 1k(列 x 行)* 2 + 25MB - 但其他可能性包括达到超时限制。