[PHP] 超簡單 讓網頁匯出Excel檔案

「請問,網頁上的XX表單,可以匯出成excel讓我下載嗎?」,我想大家在工作上應該會聽到這樣的需求,PHP透過header的設定,可以很簡單的達到...
<?php if ($_GET['action'] == 'excel') {     header('Content-type:application/vnd.ms-excel');  //宣告網頁格式     header('Content-Disposition: attachment; filename=myexcel.xls');  //設定檔案名稱 } else {     $html_button = '<form action=""><input type="submit" name="action" value="excel"></form>'; } ?> <html>     <head>         <meta charset="UTF-8">     </head>     <body>         <?=$html_button?>         <table border="1">             <tr>                 <th>a欄</th>                 <th>b欄</th>                 <th>c欄</th>             </tr>             <tr>                 <td>資料1</td>                 <td>資料2</td>                 <td>資料3</td>             </tr>         </table>     </body> </html> 上面是一個最基本的範例,再依不同需求去更改就好了。

註1:
有些人會採用fopen跟fwrite的方式,直接產生excel檔案再寫入內容,如果是採取這種方式,請使用 "\t"來換格、"\n"來換行 ,並且注意一定要用雙引號去包,單引號的話就僅是呈現\t或\n的文字。

註2:
如果發生 Excel 的中文字變成亂碼的情形,有兩種方式可以解決:
1. 整個網頁採用BIG5編碼方式
2. 假設網頁一定要保持UTF-8的話,就用iconv("UTF-8","Big5","中文字")去個別處理。

註3:
如果header語法在IE會失敗的話(原因),可以改用另一種語法。(參考)
header('Pragma:public');
header('Content-Type:application/x-msexecl;name="myexcel.xls"');
header('Content-Disposition:inline;filename="myexcel.xls"');

註4:
如果匯出的資料量太大,會出現空白的狀況,這時候就要加大記憶體用量,請在程式最上方加入以下語法:
ini_set("memory_limit", "256M");

註5:
如果匯出的數字前面有零,例如:000123,會發現在 Excel 上面只會顯示 123 ,如果要強制顯示前面的零,可以用 =T("000123") ,去強制顯示零。
或是增加下面的CSS也可以強制轉成文字格式。 參考這裡
mso-number-format:"\@";

註6:
如果資料是包含<br>的一段文字,例如:123<br>456,會發現在 Excel 會自動增加一列 (123一列、然後456一列),如果我們希望123跟456能在同一個儲存格內換行,直覺會先試著將<br>替換成"\n"、"\r\n" 或 PHP_EOL,但轉成Excel後會發現無法換行,此時解法是不要替換<br>,然後直接加上下面的CSS,就會發現轉成Excel後,資料就神奇的在儲存格內換行了。
br {mso-data-placement:same-cell;}