2009-05-29

PHPExcel中导出Excel出错的一种可能原因

Posted in PHP at 12:47 Author:仲远

标签:

PHPExcel是PHP中功能最强大的导入、导出、操作Microsoft Excel的开源项目。

虽然,目前有很多方法能够在PHP页面上导出csv文件,但是经过测试发现使用通常方式在PHP中导出的Excel文件,在MS Excel2007下打开的时候,会提示格式与后缀名不符。虽然最后也能够正常打开,但是总是有这样的一个提示,也是很不爽的。

但是使用PHPExcel生成的Excel完全没有这个问题。最牛的是PHPExcel能够完全生成Excel2007格式的文件,也就是后缀名为.xlsx的文件。PHPExcel导出Excel表的使用方法网上已经很多了,本文就不赘述。不过,在使用过程中,我却发现了一个莫名其妙的问题:那就是使用PHPExcel自动导出excel的文件有时候能够正常导出并打开,有时候生成的excel文件却无法打开,Excel2007提示“发现无法读取的内容”

使用文本编辑器打开生成的Excel文件,发现一行提示“Fatal error: Call to a member function setValue() on a non-object in PHPExcel/Calculation/FormulaParser.php on line 431”。

经过仔细而又痛苦的检查发现,原来是因为在写入单元格的文本值中,有些值以等号开头,例如“====中国青年报…”,结果PHPExcel在写入这个单元格的时候,将其判定为公式,于是调用公式解析器去计算相应的值,但是又无法正确进行计算(因为本来就不是公式嘛),所以就导致生成的excel文件无法打开。

解决办法非常简单,就是在往excel单元格写入文本值之前,先过滤掉等号“=”,即可

虽然最后的解决办法非常简单,但是确定问题之所在却花费了将近一天的时间。过程是痛苦的,但是发现产生问题的原因之后,确实很让人心情畅快的。

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

1 Comment »

  1. wzxjjz said,

    2013年June3日 at 21:44

    可以设定cell的格式为文本。
    setCellValueExplicit(’A1′, ‘aaaa’), PHPExcel_Cell_DataType::TYPE_STRING)

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