Yii2使用phpOffice导出excel报错

薄洪涛5年前PHP2362

线上导出excel的时候,是不是出现无法访问,如下图

TIM截图20200814215057.png

因为导出的数据量比较大,我怀疑是内存溢出,于是增加了内存分配值,发现仍然报错,于是我查了下日志,如下

2020-08-14 21:31:12 [192.168.8.12][-][-][error][PhpOffice\PhpSpreadsheet\Calculation\Exception] PhpOffice\PhpSpreadsheet\Calculation\Exception: 2020_08_14!K3314 -> Formula Error: An unexpected error occured in /home/www/root/yii2-advanced/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php:274
Stack trace:
#0 /home/www/root/yii2-advanced/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php(443): PhpOffice\PhpSpreadsheet\Cell\Cell->getCalculatedValue()
#1 /home/www/root/yii2-advanced/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls.php(185): PhpOffice\PhpSpreadsheet\Writer\Xls\Worksheet->close()
#2 /home/www/root/logtest/admin-lte/components/Utils.php(143): PhpOffice\PhpSpreadsheet\Writer\Xls->save('php://output')
#3 /home/www/root/logtest/admin-lte/controllers/VisitInfoController.php(180): app\components\Utils::getExcel('\xB5\xBC\xB3\xF6\xCE\xC4\xBC\xFE_2020_0...', Array, Array)
#4 [internal function]: app\controllers\VisitInfoController->actionExport()
#5 /home/www/root/yii2-advanced/vendor/yiisoft/yii2/base/InlineAction.php(55): call_user_func_array(Array, Array)
#6 /home/www/root/yii2-advanced/vendor/yiisoft/yii2/base/Controller.php(154): yii\base\InlineAction->runWithParams(Array)
#7 /home/www/root/yii2-advanced/vendor/yiisoft/yii2/base/Module.php(454): yii\base\Controller->runAction('export', Array)
#8 /home/www/root/yii2-advanced/vendor/yiisoft/yii2/web/Application.php(84): yii\base\Module->runAction('visit-info/expo...', Array)
#9 /home/www/root/yii2-advanced/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 /home/www/root/logtest/admin-lte/web/index.php(19): yii\base\Application->run()
#11 {main}

发现是使用的包报了错,然后百度一番,找到了原因

  1. 导出的单元格内,第一个字符是‘=’,造成PHPExcel解析的时候当成这个单元格的值是由其他单元格计算出来的,后面需要跟着一个合法表达式。如果不是这样,应该在程序中过滤掉。

我们使用ltrim过滤掉就可以了







标签: phpoffice

相关文章

PHP程序猿食用RabbitMQ方法

消息队列是什么?“消息队列”是在消息的传输过程中保存消息的容器。“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中。“消...

Yii2.0 jQuery(...).yiiActiveForm is not a function

Yii2.0 jQuery(...).yiiActiveForm is not a function

记一个常见的错误,如下图当我们在view中创建一个activeForm的时候,有时会报这种错误;通常情况下,是jquery重复引入导致的,因为你引入的jquey的版本跟yii2自带jquery版本冲突...

Laravel打印sql

在AppServiceProvider.php的boot方法中,增加以下代码DB::listen(     function ($sql) ...

跨域的其他方式

上次向大家介绍了跨域的解决方式jsonp,总感觉差点什么,所以,补充一下,介绍另外一种跨域方式:比如说,公司内部系统之间,比如ERP和OA之间想要进行数据交互,但是每个系统都有自己的域名,如果想实现数...

大文件之分片上传

大文件之分片上传

    我们知道,无论是nginx还是php,都会对上传文件的大小做限制,今天刚刚做了一个客户端包的管理,要求上传apk或者ipa文件,而且都不小(超出了php...

谷歌浏览器加载前端资源status=canceled

谷歌浏览器加载前端资源status=canceled

如图,今天在做弹出框(modal中用了iframe)的时候,发现模态框弹出的时候,会有一些前端资源加载被取消,但是也会有加载时间,影响页面的加载速度;然后我尝试用火狐,发现没有这个问题经过一顿goog...

评论列表

访客
2020-08-15 23:18:32

感谢经验分享,佩服解决问题的能力

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。