在前兩篇,我們學會了如何用 API 開啟記事本和小畫家。
但光是開應用程式還不夠,我還希望 AI 能幫我操作 Word 文件,像是新增文件、輸入內容、儲存檔案。這一篇,先從最基礎的功能開始:開啟一個空白的 Word 文件。
這個 API 的功能是:
@app.post("/open-blank-word")
def open_blank_word():
"""
純粹開啟一個空白的 Word 應用程式,不寫入任何內容。
"""
print(f"[DEBUG] 收到 open-blank-word 請求")
logger.info("收到 open-blank-word 請求")
word_app = None
try:
# 在多執行緒環境中,必須先初始化 COM
pythoncom.CoInitialize()
# 嘗試取得現有的Word實例,如果沒有則創建新的
try:
word_app = win32.GetObject(Class="Word.Application")
if word_app.Documents.Count == 0:
# 沒有開啟的文件,創建新文件
doc = word_app.Documents.Add()
else:
# 已有Word開啟,直接顯示不創建新文件
word_app.Visible = True
logger.info("Word 已經在運行,直接顯示現有實例。")
return {"status": "success", "message": "Word 已經在運行,已顯示現有實例。"}
except:
# 如果取得現有實例失敗,創建新的Word應用程式
word_app = win32.Dispatch("Word.Application")
word_app.Visible = True
doc = word_app.Documents.Add()
# 確保Word是可見的
word_app.Visible = True
logger.info("已成功開啟空白的 Word 應用程式。")
return {"status": "success", "message": "已成功開啟空白的 Word 應用程式。"}
except Exception as e:
error_msg = str(e)
logger.error(f"開啟空白 Word 時發生錯誤: {error_msg}")
if "(-2147352567" in error_msg:
return {"status": "error", "message": "Word 啟動失敗。請確保 Microsoft Word 已正確安裝。"}
else:
return {"status": "error", "message": f"開啟空白 Word 時發生錯誤: {error_msg}"}
finally:
try:
pythoncom.CoUninitialize()
except:
pass
逐行拆解:
函數定義def open_blank_word():
COM 環境初始化pythoncom.CoInitialize()
- 多執行緒環境下操作 COM 物件的必要步驟
智能檢查現有實例win32.GetObject(Class="Word.Application")
- 先嘗試連接已存在的 Word 實例
條件式處理
安全清理finally
區塊確保 COM 環境正確清理
完整錯誤處理
使用者發送請求:
POST http://127.0.0.1:8000/open-blank-word
API 智能檢查:
成功時:
{
"status": "success",
"message": "已成功開啟空白的 Word 應用程式。"
}
Word 已運行時:
{
"status": "success",
"message": "Word 已經在運行,已顯示現有實例。"
}