PHPEXCEL致命错误:允许的内存大小为134217728字节耗尽addTableRow()方法的问题

时间:2015-07-20 10:00:55

标签: cakephp-1.3 phpexcel php-5.3

首先,我知道PHPExcel在从数据库创建Excel工作表时会占用大量内存。我使用的是mysql数据库,返回的行大约是14K加。我需要为这些记录生成Excel表格。

可以使用此代码为小条目生成Excel工作表,但是对于14K记录,此代码正在破坏。我看到了缓存单元技术,但作为PHPExcel的新手我发现它非常困难。

任何人都可以指导我解决这个问题。

来源:https://github.com/segy/PhpExcel

以下是我的代码段:

App::import('Component', 'PhpExcel');
$phpExcelObj = new PhpExcelComponent();
$phpExcelObj->createWorksheet()->setDefaultFont('Calibri', 12);
// define table cells
$table = array(
array('label' => ('Id'), 'wrap' => true),
array('label' => ('Name'), 'wrap' => true, 'filter' => true),
array('label' => ('Email_id'), 'wrap' => true, 'filter' => true),
array('label' => ('status'), 'wrap' => true, 'filter' => true)
            );
$phpExcelObj->addTableHeader($table, array('name' => 'Cambria', 'bold' => true));
$indx = 1;
foreach ($ckt_dtls as $usr_dtls) {
$rows[] = $indx;
$rows[] = $usr_dtls['name'];
$rows[] = $u_email;
$rows[] = $stat;
$indx++;
$phpExcelObj->addTableRow($rows);
}
$phpExcelObj->addTableFooter()->output($filename = $filename, $writer = 'Excel2007');

我得到的错误是:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to 
allocate 57 bytes) in /var/www/4thambit_v6/app/vendors/PHPExcel/Worksheet.php on line 1218

2 个答案:

答案 0 :(得分:0)

尝试扩展PHP用于脚本的内存限制,将以下代码放在开头:ini_set("memory_limit", "2048M"); 如果不起作用,请尝试使用大于2048M

的数字

答案 1 :(得分:0)

如果您不想担心内存或无法更改memory_limit设置,可以尝试使用Spout代替。

我不知道这个库周围有任何CakePHP包装器,但在项目中使用它不应该太难。只需按照此处的说明操作:https://github.com/box/spout#manual-installation

写入14K应该花费几秒钟而不超过10MB的内存!