Yii2使用phpOffice导出excel报错

薄洪涛4年前PHP1878

线上导出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

相关文章

redis持久化的两种方式

redis持久化的两种方式

redis为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。数据保存到硬盘的过程就称为“持久化”效果。redis支持...

csrf攻击原理及防范

csrf攻击原理及防范

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。在不少的...

workerman实现聊天室

workerman实现聊天室

Workerman的一些应用方向如下1、即时通讯类 例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送等等 [示例 workerman-chat聊天室 、&nb...

抢红包的一些实现思路

抢红包的一些实现思路

最近探索了关于抢红包的一些实现思路,在此记录下本篇文章主要探讨了金额随机算法关于分布式锁的一些探索我们开始,首先说下抢红包的业务流程,分为两步,发红包和抢红包,在抢红包的时候,并发是非常大的,我们这里...

Yii2.0整合ueditor并上传图片到七牛云

Yii2.0整合ueditor并上传图片到七牛云

某个项目要做一个文章模块,用到Ueditor,并且ue中的图片要上传到七牛,所以总结下步骤;1、Yii2.0下载ueditor for Yii2.0和七牛composer require&n...

Yii2.0认证及限流

Yii2.0认证及限流

上次搭建了Yii2.0的接口框架后,现在开始搭建认证和限流模块,先说下这两个模块的作用认证:前后端分离,每次请求都是无状态的,及每一次请求服务器不知道你是谁,你有没有登陆;我们就需要做一个认证模块去识...

评论列表

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

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

发表评论    

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