前置條件
- Windows 作業系統 (COM 僅限 Windows)。
- 已安裝 Microsoft Office (Word)。
- PHP 設定
com.allow_dcom = true (php.ini)。
- 執行 PHP 的使用者需有啟動 Word 的權限 (IIS 需設定應用程式集區身分識別)。
基本範例
Version}
";
$word->Visible = 1; // 顯示視窗 (除錯用),生產設 0
$word->Documents->Add(); // 新增文件
$word->Selection->TypeText("這是 PHP 透過 COM 寫入的測試文字。\n第二行。");
$word->Documents[1]->SaveAs("C:\\temp\\test_com_php.doc");
$word->Quit();
echo "文件已儲存。";
} catch (com_exception $e) {
echo "COM 錯誤: " . $e->getMessage();
}
?>
常用 Word COM 操作速查
| 操作 | 程式碼 |
| 開啟現有文件 | $word->Documents->Open("C:\\path\\file.doc") |
| 游標移動 | $word->Selection->MoveRight(wdCharacter, 5) |
| 插入換頁 | $word->Selection->InsertBreak(wdPageBreak) |
| 設定字型 | $word->Selection->Font->Name = "微軟正黑體"; $word->Selection->Font->Size = 14; |
| 匯出 PDF | $word->ActiveDocument->SaveAs("file.pdf", 17); // wdFormatPDF |
| 郵件合併 | $doc->MailMerge->OpenDataSource(...); $doc->MailMerge->Execute(); |
安全與穩定性警示
- 記憶體洩漏:COM 物件必須確實
Quit() 並釋放變數 unset($word),否則 Word 進程殘留佔用資源。
- 權限問題:IIS/IUSR 預設無桌面互動權限,Word 會彈視窗卡住。解法:應用程式集區身分設為有桌面權限的使用者,或用任務排程器觸發獨立腳本。
- 非同步處理:Web 請求中直接操作 COM 會阻塞執行緒,建議寫入佇列 (資料庫/Redis),由背景 Worker (Windows 排程/服務) 處理。
- 替代方案:純 PHP 產生 docx (PHPWord)、轉 HTML 列印、LibreOffice headless 轉檔,避免 COM 依賴。
- 上一篇文章: 聊天室技術:長輪詢 (Long Polling) 只有新訊息才回應,避免頻繁重整
- 下一篇文章: PHP 文字檔留言板:免資料庫、表單驗證、HTML 過濾、檔案追加儲存
Copyright ©
程式碼之家 All Rights Reserved