2009-06-22
在使用PHPExcel导出Excel时出现的几个错误的解决办法
标签:Freebsd/Unix服务器, PHP, 解决办法PHPExcel是PHP中功能最强大的导入、导出、操作Microsoft Excel的开源项目。但是它体系复杂,有时会让人难以掌控。
由于Microsoft Office是商业软件,因此在Office2003及之前的版本,微软的文档格式是不公开的。这导致别的Office办公软件处于极其被动的地位,因为他们再怎么努力,也很难完全兼容被普遍使用的Microsoft Office Word、Microsoft Office PowerPoint、Microsoft Office Excel等软件。在Microsoft Office 2007版推出以后,微软采用了XML作为这些文档的底层存储方式,并且努力推广Office2007所采用Open Office XML(OOXML)成为国际文档格式标准。虽然中国投了反对票,但是最终在今年4月初,ISO通过快速通道投票确认微软提出的OOXML因大多数成员认可而成为国际文档格式标准。
但是,OOXML文档格式标准“规格极其复杂,设计完全落伍”(“中国自由软件界元老”之称的宫敏博士之语),仍然很难被其它软件所掌控。从这个意义上来说,PHPExcel真的是一款非常牛的开源软件了。它能够从PHP中导出各种版本的Excel文档(包括Excel2007格式的文档),并且支持一定程度的复杂格式。
不过言归正传,由于PHPExcel为了去产生Microsoft Office的文档,因此可能在导出Excel的时候会出一些奇怪的错误。如果你发现使用PHPExcel导出的Excel表无法用MS Excel打开,可以尝试使用文本文档或者是EditPlus打开导出的Excel文件,看看是否有提示何种错误。以下是两种错误的解决办法:
(1)Fatal error: Maximum execution time of 30 seconds exceeded解决错误方法
需要修改php.ini文件,如果是使用Ubuntu 9.04 Server的服务器,可以在/etc/php5/apache2/下找到php.ini文件,如果是Freebsd,可以在/usr/local/lib/下找到php.ini文件。使用sudo权限编辑下面的语句:
将如下语句:
max_execution_time = 30
修改为:
max_execution_time = 300
也就是将PHP脚本最长执行时间从30秒延长到300秒。
然后重启一下Apache服务器,如果是Ubuntu Server的服务器,可以使用如下命令:
sudo /etc/init.d/apache2 restart
(2)Fatal error: Allowed memory size of 16777216 bytes exhausted 的解决办法
一样地需要修改php.ini文件:
将如下语句:
memory_limit = 16M
修改为:
memory_limit = 512M
也就是将PHP脚本所能够申请的内存从16M扩大到512M。具体数字可以根据自己的需要确定。
一样需要重启Apache服务器。
需要注意的是:
(1)以上的修改可能存在一定风险,例如给服务器造成过大的负担。所以请再三确认是否有必要给PHPExcel或者是其他PHP程序开放更大的内存空间以及更长的执行时间。
(2)修改完php.ini之后,只有重启Apache之后,新的设置才会生效。
(3)php.ini中的设置,请根据自己服务器的情况量力而行。
本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:http://www.wangzhongyuan.com/archives/705.html
张鹏 said,
2009年7月27日 at 0:15
phpmyadmin使用cvs来导入excel数据,这种方法和cvs导入有什么区别吗?
仲远 said,
2009年7月27日 at 10:22
这篇文章中的导入Excel表的方式比CVS导入具有更强大的功能。例如,CVS只能导入简单的文本,而PHPExcel甚至可以导入文字上附带的链接。
如月 said,
2010年3月16日 at 16:28
真想知道用PHP将SQL中的内容导入excel的时候,对于大段文本的longblob要怎么办?或者可以预设excel的某一列属性是“文本”?
我要DVD said,
2010年5月14日 at 11:29
路过,支持一下!