首先,我知道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
答案 0 :(得分:0)
尝试扩展PHP用于脚本的内存限制,将以下代码放在开头:ini_set("memory_limit", "2048M");
如果不起作用,请尝试使用大于2048M
答案 1 :(得分:0)
如果您不想担心内存或无法更改memory_limit
设置,可以尝试使用Spout代替。
我不知道这个库周围有任何CakePHP包装器,但在项目中使用它不应该太难。只需按照此处的说明操作:https://github.com/box/spout#manual-installation
写入14K应该花费几秒钟而不超过10MB的内存!