PHP 導出 Office 文件的本質是通過設置恰當的 HTTP 響應頭,讓瀏覽器以附件形式下載並由關聯程序打開。關鍵在於 Content-Type 和 Content-Disposition 兩個頭部。
header("Content-Type: application/msword");
header("Content-Disposition: attachment; filename=\"測試.doc\"");
header("Cache-Control: max-age=0");
// 輸出 HTML 內容即可被 Word 解析
echo '<html><body><h1>你好,Word</h1></body></html>';
注意:現代 Word 版本支援直接解析 HTML,但複雜樣式建議使用 PHPWord 等庫生成真正的 OOXML 格式(.docx)。
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"測試.xls\"");
header("Cache-Control: max-age=0");
// 輸出 HTML 表格或制表符分隔文本
echo "<table><tr><th>姓名</th><th>身份證號</th></tr>";
echo "<tr><td>張三</td><td>110101199001011234</td></tr>";
echo "</table>";
Excel 預設將超過 11 位的純數字轉為科學計數法。常見錯誤嘗試:
'110101199001011234 → Excel 仍視為數字或顯示引號。 或  $id = '110101199001011234'; // 方案一:前綴不間斷空格(推薦) echo '<td> ' . $id . '</td>'; // 方案二:CSS 文本模式(僅對 xlsx/HTML 導入有效) echo '<td style=\"mso-number-format:\@\">' . $id . '</td>';
原理: 導致單元格內容以文本形式存儲,Excel 不再嘗試數值化解析。
| 需求 | 推薦庫 | 優勢 |
|---|---|---|
| 純導出、無依賴 | CSV + UTF-8 BOM | 極簡、通用、無格式問題 |
| 樣式、公式、合併儲存格 | PhpSpreadsheet | 功能完整、支援 .xlsx/.ods、活躍維護 |
| Word 複雜文檔 | PHPWord | 支援 .docx、模板引擎、轉 PDF |