一個包含文字方塊、部門下拉選單與行為守則核取方塊的 Word 表單,搭配一個有三十位新員工的試算表:這就是一個早晨的複製貼上,或是一個提示。當本機執行 GroupDocs.Editor MCP 伺服器時,Claude、Cursor 或 Copilot 會先詢問表單有哪些欄位,然後為每一列填寫一份副本,並以該人的姓名儲存。表單的版面保持不變,任何沒有對應欄位的值都會被回報,而不是悄悄被丟棄:

讀取 new-employee-form.docx,然後為 new-hires.csv 的每一列填寫一份副本,並以員工姓名命名每個檔案。

逐步說明請參考文件:如何使用 AI 代理從資料填寫 Word 表單欄位。

誰在讀取試算表?

代理會這麼做,說明這點很重要。Editor 伺服器只處理 Word 表單;它不會讀取你的 CSV 或工作簿。代理使用自己的檔案工具讀取列,或是你貼上它們,然後對每一列呼叫一次 fill_form_fields,並為每個人指定 outputName。這樣的分工是一項功能:資料永遠不需要符合伺服器能理解的格式,且代理可以在傳入表單前先清理資料(拆分全名、正規化日期)。

先詢問表單

Word 表單中的欄位名稱很少與頁面上的標籤相同。標籤可能寫著「Full name:」,但欄位實際名稱可能是 FullName、Text1 或 Name_Employee。猜測會導致表單回傳時缺少一半的欄位。get_form_fields 會回傳真實的名稱、類型以及目前的值。以下是從 GroupDocs.Editor.Mcp 26.10.0 針對一個合成的入職表單擷取的結果(輸出已縮短):

-> get_form_fields {"file":{"filePath":"new-employee-form.docx"}}
<- { "count": 6, "fields": [
     { "name": "FullName",   "type": "Text",     "value": "" },
     { "name": "Email",      "type": "Text",     "value": "" },
     { "name": "StartDate",  "type": "Text",     "value": "" },
     { "name": "Department", "type": "DropDown",
       "value": { "options": [ "Engineering", "Finance", "Sales",
                               "Operations" ], "selected": "Engineering" } },
     { "name": "Agree",      "type": "CheckBox", "value": false },
     { "name": "Newsletter", "type": "CheckBox", "value": false } ] }

下拉選單會同時提供其選項,因此代理可以將試算表中的「finance」對應到正確的「Finance」條目,而不是自行創造第六個部門。

然後填寫一列

-> fill_form_fields {"file":{"filePath":"new-employee-form.docx"},
     "values":{"FullName":"Amara Okafor",
               "Email":"amara.okafor@northwind.example",
               "StartDate":"2026-12-01","Department":"Finance",
               "Agree":"true","Phone":"+31 10 555 0100"}}
<- Updated 5 field(s) in 'new-employee-form.docx': FullName, Email,
   StartDate, Department, Agree.
   Not found: Phone. Call get_form_fields for the exact names.
   Saved to: …/new-employee-form_edited.docx

試算表中有電話欄位,但表單沒有對應的欄位。伺服器填寫了五個存在的欄位,並將沒有對應的欄位名稱列出。使用 get_form_fields 讀回已填寫的副本時,可看到值已正確寫入,包含 "selected": "Finance" 與 "Agree": true,而 Newsletter 仍保持未勾選,因為該列未另行說明。

整批處理

new-hires.csv (agent reads it)          new-employee-form.docx
  Amara Okafor, Finance, ...  ---+
  Tomas Varga, Sales, ...     ---+      get_form_fields (once)
  ...                            |        -> FullName, Email, StartDate,
                                 |           Department, Agree, ...
                                 v
  fill_form_fields {"values":{...row...},
                    "outputName":"form-amara-okafor.docx"}   x one per row
     -> "Updated 5 field(s) ... Not found: Phone"
     -> form-amara-okafor.docx, form-tomas-varga.docx, ...

讓批次處理可靠的三項指示:在第一次填寫前先呼叫一次 get_form_fields,並將欄位對映到表單欄位名稱;為每一列指定自己的 outputName,否則副本會堆疊成 new-employee-form_edited.docx、new-employee-form_edited (1).docx 等,且沒有任何人的姓名;最後將「Not found」行彙總成一份報告,而不是在第一個錯誤時就停止。

一個在第一列就能正常運作的提示

大多數批次失敗發生在第一列,之後會重複三十次。先要求進行一次試跑:

讀取 new-employee-form.docx 的欄位以及 new-hires.csv 的標頭。告訴我哪個欄位對應到哪個表單欄位,哪些欄位沒有對應的欄位。然後只填寫第一列並停止。

代理會回傳一個小型對映表,例如 Name -> FullName、Dept -> Department、Phone -> (no field),以及一個可供開啟的已填寫表單。如果部門拼寫或日期格式錯誤,你會只看到一次,修正指示後再要求其餘列。這個檢查步驟只需一分鐘,卻能讓三十份正確的表單與三十份需要人工檢查的表單天差地別。

它也能解決試算表本身無法回答的問題。空的「Agree」儲存格應該視為未勾選,還是應該跳過該列?「2026-12-01」應直接寫入日期欄位,還是轉成「1 December 2026」?代理會依照你的指示執行,但必須先告訴它。

表單工具還能處理什麼

文字、數字與日期欄位以字串填寫;核取方塊接受 "true" 或 "false";下拉選單則接受其選項之一。format 可將已填寫的副本儲存為 DOC、RTF 或 ODT,而非 DOCX;已填寫的表單始終是 Word 文件,因此新員工的 PDF 必須在之後另行轉換。受密碼保護的表單可使用 password 開啟,且保持受保護狀態。已填寫的副本是由表單欄位引擎寫入,而非透過 HTML,因此頁首、頁尾與頁碼會如原本般保留。這些工具支援讀取 DOCX、DOC、DOCM、DOT、DOTX、RTF 與 ODT 表單。

誠實的限制

  • 僅支援 Word 表單,且僅限傳統表單欄位:即 Word 從 Developer → Legacy Tools 插入的文字、核取方塊與下拉選單欄位。內容控制項不會被列出或填寫。PDF 表單(AcroForms)不在此伺服器的支援範圍內。
  • 伺服器不會讀取試算表;代理提供值,因此在讓它處理全部列之前,請先檢查第一列的欄位對映。
  • 一次呼叫只能填寫一個表單。三十份的批次即是三十次呼叫。
  • 評估模式會在每個已填寫的副本頂部加入一行橫幅,因此未授權的輸出僅為草稿,不能直接寄給新員工。

常見問題

代理如何得知欄位名稱?
它會詢問:get_form_fields 會回傳每個欄位的名稱、類型與目前的值,以及每個下拉選單的選項。

如果表單沒有對應欄位的值會怎樣?
它會被跳過,並在回應中列出名稱(「Not found: Phone」),讓代理能夠報告此情況。

我的原始表單會被更改嗎?
不會。每次填寫都會寫入新檔案;模板保持空白,以供下一列使用。

深入了解