首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 導出 Word 與 Excel 文件實戰指南:從基礎 Header 到避坑指南

     編輯:PHP 相關知識

核心原理:HTTP Header 控制瀏覽器行為

PHP 導出 Office 文件的本質是通過設置恰當的 HTTP 響應頭,讓瀏覽器以附件形式下載並由關聯程序打開。關鍵在於 Content-Type 和 Content-Disposition 兩個頭部。

導出 Word 文檔(.doc)

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)。

導出 Excel 電子表格(.xls)

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 仍視為數字或顯示引號。
  • 設置單元格格式為「文本」 → PHP 輸出的 HTML 無法控制 Excel 打開後的單元格格式。

有效解決方案:HTML 實體空格 &nbsp; 或 &#160;

$id = '110101199001011234';
// 方案一:前綴不間斷空格(推薦)
echo '<td>&nbsp;' . $id . '</td>';

// 方案二:CSS 文本模式(僅對 xlsx/HTML 導入有效)
echo '<td style=\"mso-number-format:\@\">' . $id . '</td>';

原理:&nbsp; 導致單元格內容以文本形式存儲,Excel 不再嘗試數值化解析。

進階建議:棄用舊格式,擁抱現代庫

對於身份證號等敏感長數字,CSV 方案天然免疫科學計數法問題,且兼容性最強。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
需求推薦庫優勢
純導出、無依賴CSV + UTF-8 BOM極簡、通用、無格式問題
樣式、公式、合併儲存格PhpSpreadsheet功能完整、支援 .xlsx/.ods、活躍維護
Word 複雜文檔PHPWord支援 .docx、模板引擎、轉 PDF