2009-06-22

在使用PHPExcel导出Excel时出现的几个错误的解决办法

Posted in PHP, FreeBSD/Unix服务器 at 13:55 Author:仲远

标签:

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/ ]
原文链接:

5 Comments »

  1. 张鹏 said,

    2009年July27日 at 0:15

    phpmyadmin使用cvs来导入excel数据,这种方法和cvs导入有什么区别吗?

  2. 仲远 said,

    2009年July27日 at 10:22

    这篇文章中的导入Excel表的方式比CVS导入具有更强大的功能。例如,CVS只能导入简单的文本,而PHPExcel甚至可以导入文字上附带的链接。

  3. 如月 said,

    2010年March16日 at 16:28

    真想知道用PHP将SQL中的内容导入excel的时候,对于大段文本的longblob要怎么办?或者可以预设excel的某一列属性是“文本”?

  4. 我要DVD said,

    2010年May14日 at 11:29

    路过,支持一下!

  5. 500W条数据 said,

    2011年September13日 at 16:23

    使用phpexcel导出500W条数据,相当杯具,内存修改为512M也扛不住……

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word