2011-02-09 96 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文件