2013年8月25日 星期日

PHPExcel - 無法儲存或開啟 excel 檔的問題

這裡說的無法儲存或開啟,是指 PHPExcel 產生的 excel 檔。
用微軟 Office 產生的 excel 不可能會打不開。如果打不開,建議您買一台新電腦

1. 產生 excel檔的時候不能出現任何不該出現的文字。
執行程式的那一頁所產生的所有內容都必須是 excel 檔儲存格的內容。例如,沒有把 php 錯誤提示的功能關掉,可能會出現 notice 訊息,告訴你變數沒有先宣告。寫 php 誰在跟你先宣告變數再使用啊。那產生的 excel 檔自然就會有問題。

如果把最後產生 excel 檔的那一行指令註解起來 #$objWriter->save('php://output');
執行的結果必須是空白頁。不能有任何一個字。可以在那一行之前使用 ob_end_clean(); 這樣就會把不該顯示的內容都清空。參考:PhpExcel (A HA! 心情雜物間)

或是在檔案的最開頭加上這一行 error_reporting(0); 不產生任何錯誤訊息。

2. php檔案必需使用 "檔首無BOM" 的編碼方式。這個問題我卡了很久才發現。使用 Note++ 編輯器,在它最上方的選單,選擇 編碼 > 編譯成 UTF-8 碼 (檔首無 BOM)。我想很多人遇到的大概是這個問題。

3. 使用 Apache 伺服器,可以存到網路上的共享資料夾(網路上的芳鄰)。但是 IIS 不行
個人使用經驗,在 Windows XP 上面執行 apache + php,可以順利產生 excel 檔。不管是 用 \\userpc\ShareFolder,或是掛載成本機磁碟機 F:\ShareFolder,都可以產生。但是如果使用 IIS + php,怎麼搞就是沒有 excel 檔的蹤影。(不過這是很久以前遇到的問題。或許不是 IIS 不行,而是環境設定。請參考下一點。)


4. 使用 Apache 伺服器,為什麼不能把檔案存到網路上的共享資料夾?
如果是以 Windows 登入使用者的權限去執行 apache ,無此問題。(當然前提是這個使用者有權限開啟共享資料夾)。像我原本是用 xampp,免安裝版,直接點兩下執行。excel 檔也很順利的在共享資料夾裡面產生。

但是如果是以"服務"的方式啟動 apache,那麼執行 apache 的預設帳號(可能是 system)會禁止做這件事。要去"服務"裡面把 apache 那支服務叫出來,將執行的帳號改為 administrator,這樣就可以成功把檔案寫到網路上的芳鄰。

沒有留言:

張貼留言