总结一下在使用PHPEXCEL过程中常遇到的坑

Author: plain - Posted:1年前 - View:1072

提示:本文只针对项目还在使用版本PHP7以下,如果你是PHP7+,应该都直接使用PhpSpreadsheet了,而不是本文介绍的PHPExcel

因为项目过于大,过于旧,并且接手维护的人太多,造成了项目代码太过杂乱,想要更新升级实在是费时费力,就算有心也是力不足,索性我也是躺平维护现成的代码就行了。

后期因为上面要导出相关的数据进行核对,我不得不在项目中加入PHPEXCEL库,方便导出EXCEL来供他们使用,刚开始我也是没用PHPEXCEL的,直接使用浏览器的输出功能导出EXCEL,只不过上面一直反应说浏览器输出下载时总提示链接不安全,让他们以为是电脑中毒了,我才决定使用PHPEXCEL来消除他们的疑虑。

我也是第一次使用PHPEXCEL,期间也是踩过了好几次坑才得以让项目功能正常使用,下面我就总结一下,看各位曾经有没有踩过跟我一样的坑。

1、导出的数据表格单元格格式混乱,有两种可能的问题。

  • 大概率是没有使用ob_clean或ob_end_clean函数清除缓存区数据所致。

  • 导出的字段内容中有包含0或是0起头的字段以前有空字段。

解决方法:

  • 如果是0起头的字段,只要不影响使用,直接使用过滤即可。
  • 包含空字段的可以在数据库中设置默认值或在代码中进行默认赋值。

2、开启报错调试并显示类似如下错误信息。

Fatal error:  Uncaught exception 'Exception' with message 'Sheet1!H2 -> Formula Error: An unexpected error occured' in /www/www.a.com/lib/PHPExcel/Cell.php:288
Stack trace:
#0 /www/www.a.com/lib/Classes/PHPExcel/Writer/Excel5/Worksheet.php(441): PHPExcel_Cell->getCalculatedValue()
#1 /www/www.a.com/lib/PHPExcel/Writer/Excel5.php(171): PHPExcel_Writer_Excel5_Worksheet->close()
#2 /www/www.a.com/model/boot.php(331): PHPExcel_Writer_Excel5->save('php://output')
#3 /www/www.a.com/index.php(49): patient->export()
#4 {main}
  thrown in /www/www.a.com/lib/PHPExcel/Cell.php on line 288

原因:导出的字段内容中首尾包含特殊字符,如:=/?/%/$/@/&/*等。

解决办法:使用正则表达式或字符串替换函数将特殊字符过滤掉,如使用str_replacepreg_replace函数。

3、独立开发的项目,引入PHPEXCEL就相对简单太多;如果是使用第三方框架,如在YII/TP框架中引入PHPEXCEL时就要注意引入顺序,否则会报找不到PHPEXCEL类的错误。

4、如何将数据库中取出的数据由数字转成字符串?

解决方法:只要使用PHPEXCEL提供的函数转换单元格类型即可,不需自己在取出的数据上下功夫转换。

0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论

目前共有 1 条回复

affagm
- affagm - 1年前

随时都要做好迟早有一天都会推倒重来的准备,领导会开窍的,(逃