iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0

修改 Word 文件 — 探索我的 AI 助手背後程式碼 (5)

上一篇我們學會了如何用 /open-word 開啟 Word 並寫入文字。

但有時候,我們並不想新建文件,而是想在現有的 Word 文件裡直接修改內容。

這就是 /modify-word 的用途!


功能簡介

這個 API 可以:

  • 連線到 正在執行的 Word 應用程式
  • 確認有開啟的文件
  • 將文件內容整個替換成新的文字

程式碼解析

@app.post("/modify-word")
def modify_word_document(request: WordRequest):
    """
    修改已開啟的 Word 文件,用新內容取代舊內容。
    """
    word_app = None
    try:
        pythoncom.CoInitialize()
        
        try:
            word_app = win32.GetObject(Class="Word.Application")
        except:
            return {"status": "error", "message": "錯誤:找不到已開啟的 Word 應用程式。請先開啟 Word。"}

        if word_app.Documents.Count == 0:
            return {"status": "error", "message": "錯誤:沒有已開啟的 Word 文件。"}

        doc = word_app.ActiveDocument

        try:
            # 方法1:選擇全部內容並替換
            word_app.Selection.WholeStory()
            word_app.Selection.Delete()
            word_app.Selection.TypeText(request.content)
        except:
            try:
                # 方法2:使用Range替換
                doc.Range().Text = request.content
            except:
                # 方法3:清除所有段落並添加新內容
                doc.Content.Delete()
                doc.Content.InsertAfter(request.content)

        return {"status": "success", "message": f"已成功修改 Word 文件,新增:'{request.content}'"}

    except Exception as e:
        return {"status": "error", "message": f"修改 Word 時發生錯誤: {e}"}
    finally:
        try:
            pythoncom.CoUninitialize()
        except:
            pass

逐行拆解:

  1. win32.GetObject(Class="Word.Application")
    • 嘗試連到正在執行的 Word。
    • 如果 Word 沒開,會回傳錯誤。
  2. if word_app.Documents.Count == 0:
    • 確保至少有一個文件被開啟。
  3. 三種修改方式
    • 方法1:Selection → 全選後刪掉,再打字輸入新內容。
    • 方法2:Range → 直接把文件文字整個替換掉。
    • 方法3:刪掉內容,再插入新文字
    • 這樣設計是為了避免 Word 版本或環境差異造成失敗。
  4. 回傳結果 → 成功會顯示「已修改 Word 文件」。

運作流程

  1. 使用者發送請求:

    POST http://127.0.0.1:8000/modify-word
    Content-Type: application/json
    
    {
      "content": "這是新的內容,已覆蓋掉舊的!"
    }
    
    
  2. API 連到 Word → 確認文件存在。

  3. 把內容清掉,改成新的文字。

  4. 回傳成功訊息:

    { "status": "success", "message": "已成功修改 Word 文件,新增:'這是新的內容,已覆蓋掉舊的!'" }
    

上一篇
DAY 9
下一篇
DAY 11
系列文
我的 AI 助手開發11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言