<?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;}
如果資料是包含<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;}
試用完您的語法,是連圖檔那些都有,請問有辦法只抓取內容的部分嗎?!
ReplyDelete如果你不想要 img 圖檔標籤,只要用 strip_tags 語法過濾掉就好了,請參考
Deletehttp://www.w3school.com.cn/php/func_string_strip_tags.asp
請問一下 試完語法後 再匯出excel 上面那個匯出的按鈕也會同時匯出至excel 請問有方法可以避免掉麼?
ReplyDelete已增加GET判斷,程式碼只是很陽春舉例,本篇重點在 header 的宣告,所以範例程式沒有寫的很周詳,還請見諒。
DeleteThis comment has been removed by the author.
ReplyDelete不好意思,
ReplyDelete想問一下EXCEL檔開啟前會先跳出檔案毀損(按確定之後EXCEL可以正常開啟),有沒有甚麼辦法可以解決?
您好,首先謝謝您提供這麼好的方法,其次我遇到一個問題,當我丟個變數進到該網頁後,網頁秀出的資料是對的,但匯出的excel資料卻是錯的,似乎是變數沒有作用。
ReplyDelete