我使用PHPexcel打开.xlsx文件(在ovh共享服务器上)并遇到我解决的问题。
保存修改后的文件时出现了新问题:
“致命错误:在870行的/home/observatvu/www/libraries/phpexcel/library/PHPExcel/Cell.php中,允许的内存大小为536870912字节耗尽(试图分配49个字节)”
我在互联网上阅读了很多问题和答案,并尝试了一些解决方案,如:
我在保存文件期间尝试编写setPreCalculateFormulas(false),但总是遇到同样的问题。
请有人帮我找到合适的解决方案吗?
谢谢
答案 0 :(得分:3)
如果你试过
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '1024MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
然后它就行不通了。
您的PHP
的限制为536,870,912(512MB)该行
$cacheSettings = array( 'memoryCacheSize' => '1024MB');
告诉PHPExcel使用1024MB的PHP内存之前切换到使用php:// temp进行缓存....这是内存元素参数名称memoryCacheSize
表示。
对memoryCacheSize值使用 lower 值,而不是PHP内存限制
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '256MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
答案 1 :(得分:2)
如果您无法使用PHPExcel的缓存系统,则可以尝试Spout:https://github.com/box/spout。 它旨在处理任何大小的文件,而不会导致内存或时间限制问题。
你需要的只有10MB的内存,你可以阅读你想要的所有XLSX文件:)
答案 2 :(得分:0)
将错误的单元格字母传递给phpExcel函数时会发生此类错误,例如:
$objPHPExcel->getActiveSheet()->setCellValue($cell, $value);
请确保不要像这样增加列字母:
chr(ord($col) + 1);
最好使用自定义增量功能,如:
//$start = 'A'
private function _incrementCol($start, $offset)
{
$result = $start;
for($i = 1; $i <= $offset; $i++) {
$result++;
}
return $result;
}