设置20个单元格类型后,PhpExcel停止工作
我有一个生成一个小xls表(~25×15)的脚本.它包含百分比和字符串,我有一个if运算符,使用以下代码将当前单元格设置为百分比类型:
$this->objPHPExcel->getActiveSheet()->getStyle($coords)->getNumberFormat()->setFormatCode('0.00%'); 但是当我导出并查看文件时,我发现它只设置了约20个单元格的类型和样式.其余所有都是默认设置.我调试它并意识到问题不在我的逻辑中.我读到了增加php缓存内存 – 尝试了但它没有用.请帮忙,因为我需要出口至少15倍的桌子.提前致谢!
PHPExcel分配了相当多的内存
虽然PHPExcel是一个漂亮的库,但使用它可能需要为PHP分配大量内存. 根据this thread,只有5个单元可以渲染6 MB的内存使用量: <?php require_once 'php/PHPExcelSVN/PHPExcel/IOFactory.php'; $objPHPExcel = PHPExcel_IOFactory::load("php/tinytest.xlsx"); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('D2',50); echo $objPHPExcel->getActiveSheet()->getCell('D8')->getCalculatedValue() . " "; echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MBrn"; ?> I get 6MB of memory usage. 另一个user even failed with a 256MByte memory设置. 虽然PHPExcel提供了减少内存占用的方法,但在我的情况下,所有减少都变得太小了. This page on github提供了PHPExcel缓存管理选项的详细信息.例如,此设置序列化和GZIPs工作表的单元格结构: $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; PHPExcel_Settings::setCacheStorageMethod($cacheMethod); PHPExcel’s FAQ解释了这个:
PHP Excel的测量结果 我检测了PHPExcel示例文件[01simple.php] [5]并做了一些快速测试. 消耗92 KByte: for( $n=0; $n<200; $n++ ) { $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n,'Miscellaneous glyphs'); } 消耗4164 KB: for( $n=0; $n<200; $n++ ) { $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n,'Miscellaneous glyphs'); $objPHPExcel->getActiveSheet()->getStyle('A' . $n)->getAlignment()->setWrapText(true); } 如果多次执行此片段不变,则每个片段消耗大约4 MB. 检查您的应用在逻辑上是正确的 为确保您的应用程序在逻辑上正确,我建议首先增加PHP内存: ini_set('memory_limit','32M'); 在我的情况下,我必须导出到在线评估应用程序的导出结果数据.虽然水平方向的单元格少于100个,但我需要导出多达10,000个行.虽然单元格的数量很大,但我的每个单元格都包含3个字符的数字或字符串 – 没有公式,没有样式. 如果存在强大的内存限制或大型电子表格 在我的例子中,没有一个缓存选项减少了所需的数量.此外,应用程序的运行时间也大大增加. 最后我不得不切换到老式的CSV数据文件导出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |