2011-02-09 95 views
5

我正在使用Cake;正如我在与函数浏览器中打开Excel文件生成:CakePHP中的PHPExcel:错误 - excel文件不兼容或损坏

我越来越从Microsoft Excel这样的错误:

Excel无法打开的文件 “组列表中的.xlsx”,因为 文件格式或文件扩展名不是 有效。验证该文件是否已损坏 ,并且文件 扩展名与 文件的格式相匹配。

我试过在从浏览器中下载文件名后删除文件名中的空格并重新打开它,它显示与上面相同的错误。任何人都经历过这个并解决它?或任何线索到底发生了什么?

基本上,由于上​​述错误,excel文件已打开但为空。我读过一个类似的问题,它说在一个组件文件中删除?>标签末尾的空格。但我不知道哪个组件文件..?

P.S.我正在使用Microsoft Excel 2010,这可能是原因吗? PHPExcel目前是否适用于 - “Microsoft Excel 2010”?

回答

2

PHPExcel Excel2007 Writer应该生成有效的xlsx文件,可以通过Excel 2007,Excel 2010和带有兼容包的Excel 2003读取。我实际上使用Excel2010和Excel2003进行了大部分测试。

首先要检查的是,是否有任何虚假字符通过在文本编辑器中打开而回显到文件中。如果有的话,那么这些文本可以作为找到问题的指南。尤其要注意空格或换行符作为文件中的第一个字符。

xlsx文件是xml文件的压缩集合,因此如果在文本编辑器中没有明显的文本字符串(PK签名旁边的文本字符串),请尝试解压缩(使用适合您的操作平台的任何解压缩程序) 。这可能会提供其他错误消息,这可能有助于诊断问题。

如果您在Windows平台上运行,则会出现一些BugArchive版本的ZipArchive扩展名(php_zip.dll),可能导致此错误。最新的SVN代码允许您使用PCLZip作为ZipArchive的替代方案。

如果您仍然遇到问题,请尝试在PHPExcel论坛上发布所有详细信息。

1

建立空的布局与适当的标题来创建/下载Excel文件

这里例如用PDF文件

<?php 
header("Content-type: application/pdf"); 
echo $content_for_layout; 
?> 
0

你试试这个?

<?php 
$file="test.xls"; 
$test="<table border=1><tr><td>Cell 1</td><td>Cell 2</td></tr></table>"; 
header("Content-type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename=$file"); 
echo $test; 
?> 

感谢

0

我强迫我的用户使用下面的代码来下载Excel表格在我的控制器(我用PHPExcel生成我的CakePHP的申请报告):

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.'myreportname.xls"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 

$this->render(false); 
  • $ objPHPExcel |这是我的工作表,一个PHPExcel()对象

  • $ this-> render(false); |为了避免任何东西输出到客户端浏览器,确保你没有搞砸Excel文件