PHPExcel下载
从Githube上下载PHPExcel的zip包,我用的1.8.1版本。zip包里有库文件和一些测试代码。
本地运行环境使用一切正常
之前为了方便编辑代码,在本地用虚拟机装了个CentOS系统,建了个站点,把PHPExcel上传后,运行测试代码,均正常。
SAE上的问题及分析
运行“01simple-download-xlsx.php”是有问题,下载的文件里只有一句XMLWriter缺失错误。
Fatal error: Class 'XMLWriter' not found in PHPExcel/Classes/PHPExcel/Shared/XMLWriter.php on line 44
这是因为SAE的标准空间没有XMLWriter这个类。
好在运行“01simple-download-xls.php”是正常的,说明依靠XMLWriter的2007版文件无法生成,但只依靠XML扩展的2003版没问题。
又找了些测试例子来运行,比如“05featuredemo.php”。先将Save Excel 2007 file部分的代码注释掉,运行时出错:
Warning: fopen(/data1/www/htdocs/587/thbim/2/PHPExcel/Examples/05featuredemo.xls) [function.fopen]: failed to open stream: Permission denied in PHPExcel/Classes/PHPExcel/Shared/OLE/PPS/Root.php on line 90
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Can't open /data1/www/htdocs/587/thbim/2/PHPExcel/Examples/05featuredemo.xls. It may be in use or protected.' in /data1/www/htdocs/587/thbim/2/PHPExcel/Classes/PHPExcel/Shared/OLE/PPS/Root.php:93 Stack trace: #0 /data1/www/htdocs/587/thbim/2/PHPExcel/Classes/PHPExcel/Writer/Excel5.php(226): PHPExcel_Shared_OLE_PPS_Root->save('/data1/www/htdo...') #1 /data1/www/htdocs/587/thbim/2/PHPExcel/Examples/05featuredemo.php(63): PHPExcel_Writer_Excel5->save('/data1/www/htdo...') #2 {main} thrown in PHPExcel/Classes/PHPExcel/Shared/OLE/PPS/Root.php on line 93
这是因为SAE的标准空间不允许写操作,于是我把保存路径设为Storage的路径:
$objWriter->save(str_replace('.php', '.xls', __FILE__));
//修改为:
$objWriter->save('saestor://upload/info.xls');
终于顺利运行,在Storage中的upload目录生成了info.xls,打开如下图:
里面包含了文本和图片,基本功能也够用了,我就没继续测试下去。
总结
-保存文件时选择Excel5,即2003版excel文件
-保存路径用Storage
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('saestor://upload/info.xls');