Table of Contents
我曾經花一小時,手動把 EQ-5D-5L 五個面向、二十五個選項一格一格貼進 Google 表單。貼到第三題發現選項順序錯了。後來才知道:Google 表單有 API,而 AI 可以幫你寫。現在同一份量表,從貼上原文到拿到連結,三分鐘。

我承認,在發現這個做法之前,我做過一件很蠢的事。
那個下午我做了一件蠢事
那是為了把 EQ-5D-5L 生活品質量表搬上線。這份量表有五個面向,每個面向五個選項,加上一題 0 到 100 分的整體健康評分。總共不到二十個欄位。
我打開 Google 表單,新增題目、貼上題幹、貼上第一個選項、貼上第二個選項……貼到第三個面向的時候,我開始懷疑自己的人生。貼到第五個面向的時候,我發現第二題的選項順序貼反了。改完之後,同事說要加病歷號欄位,而且日期要改成日期選擇器。
那天下午我花了將近一小時,產出了一份還算堪用、但我完全不想再做第二次的表單。
問題是,PROMs 計畫裡不只這一份。還有 KDQOL-36(三十六題)、ESAS-r:Renal(十題)、體適能篩檢紀錄單(要依燈號分流)。照這個速度,光是把量表數位化就要耗掉一個禮拜,而且每次 SOP 微調就要重來一次。
轉折點:表單其實是「程式」
後來我才意識到一件事:Google 表單有 API。
它叫 Google Apps Script,是 Google 內建的自動化環境,語法就是 JavaScript。你可以用幾行程式碼建立表單、新增題目、設定驗證規則、甚至設計分頁跳轉邏輯:
var form = FormApp.create('歐洲生活品質量表 (EQ-5D-5L)');
form.addMultipleChoiceItem()
.setTitle('1. 行動能力')
.setChoiceValues([
'我四處走動沒有困難',
'我四處走動有一點困難',
'我四處走動有中度困難',
'我四處走動有極度困難',
'我無法四處走動'
])
.setRequired(true);
這段程式碼做的事,等同於我在網頁介面上點了大概十五次滑鼠。
但這裡有個門檻:你要會查 Apps Script 的 API 文件。
setChoiceValues
吃的是陣列還是物件?怎麼做數字範圍驗證?分頁跳轉的方法叫什麼?這些不難,但要查,而且查完還要記。對一個臨床醫師來說,這個學習成本足以讓人退回去繼續手動拉表單。
直到 AI 把這個門檻拿掉了。
做法:把量表原文貼給 AI,要它產出 Apps Script
整個流程只有三個動作:
第一步,把量表內容原封不動貼給 AI。 不需要整理格式,不需要轉成表格。我當時就是直接把列印版問卷的文字全部複製貼上——包含那些
☐
符號、換行、標題,通通照貼。然後補一句:「把下面內容轉換成 Google Form」。
第二步,拿到
.gs
檔。 AI 會回傳一段完整的 Apps Script 程式碼。
第三步,執行。 前往 script.google.com 開新專案、貼上程式碼、按執行、授權。幾秒鐘後,執行紀錄會印出兩條連結:一條是表單編輯連結,一條是給填答者的連結。
表單就長在你的 Google Drive 裡了。
我用這個方式重做 EQ-5D-5L,從貼上量表到拿到可用連結,不到三分鐘。
AI 不只是「照抄」,它會補上你沒想到的細節
如果 AI 只是把文字機械式轉成題目,那也只是省了打字時間。真正讓我意外的是它在轉換過程中做的判斷。
它會挑對題型。 原始問卷上的「填表日期:____年____月____日」,AI 沒有做成三個文字欄位,而是用了
addDateItem()
日期選擇器。這件事很重要——手動輸入的日期會出現「115/3/2」「2026-03-02」「3月2日」三種格式混在同一欄,後續資料處理會是一場災難。日期選擇器直接根除這個問題。
它會加上驗證規則。 EQ VAS 那題要填 0 到 100 的數字,AI 自動加了範圍驗證:
var vasValidation = FormApp.createTextValidation()
.requireNumberBetween(0, 100)
.setHelpText('請輸入 0 到 100 之間的數字')
.build();
填答者打錯就當場擋下來。這種防呆如果要手動設定,你得知道 Google 表單的驗證功能藏在題目右下角的三個點裡面。
它會處理你講不清楚的需求。 體適能篩檢單那份更明顯。那份表單的邏輯是:篩檢完成後判讀出黑/紅/黃/綠四種燈號,每種燈號對應完全不同的處置動作。我原本以為只能把四組處置動作全部列出來,讓同仁自己找。
結果 AI 用了分頁跳轉:判讀題選了「紅燈」,表單自動跳到紅燈專屬的處置清單,其他三組完全不會出現。同仁看到的永遠只有跟眼前這位病人有關的那幾行。
這功能在網頁介面上要設定「根據答案前往相關區段」,得先建好四個區段、再回頭一個一個綁定,是最容易設錯也最容易被放棄的功能之一。用程式碼寫,它只是幾行:
triage.setChoices([
triage.createChoice('⚫ 黑燈:醫療復健群', pageBlack),
triage.createChoice('🔴 紅燈:肌少高危群', pageRed),
triage.createChoice('🟡 黃燈:隱性衰弱群', pageYellow),
triage.createChoice('🟢 綠燈:健康維持群', pageGreen)
]);
真正的價值:改版成本趨近於零
不過,省下的那一小時其實不是重點。
重點是修改。
那份體適能表單交出去之後,我提了一個修改:原本 SARC-F 是一個「總分 0–10 分」的欄位,我希望拆成標準五題(力量、行走、起身、爬樓梯、跌倒),每題單選、選項直接標示配分,讓同仁邊問邊勾。
如果是手動拉的表單,這代表刪掉一題、新增五題、每題打三個選項、設好必填、再確認題目順序沒亂掉——大概二十分鐘,而且改完要從頭檢查一遍。
用 Apps Script 的做法,我只說了一句「SARC-F 的部分幫我把題目分開」,拿到新版程式碼,執行,完成。
而且因為表單的定義存在一個文字檔裡,它自然而然帶來三件手動表單給不了的東西:
- 可版本控制。
v1、v2檔案放進 Git,誰在什麼時候改了哪一題,一目瞭然。SOP 修訂時要證明表單同步更新過,直接調 commit 紀錄。 - 可複製。 腎臟科的篩檢單改個判斷閾值就是心臟科的版本。改的是變數,不是重畫一份。
- 可審閱。 表單邏輯是一份可以印出來給同仁看、可以放進 SOP 附錄的文件,不是散落在網頁介面各個角落的設定。
對做品質改善的人來說,最後這點特別有感。我們常常卡在「表單改了但 SOP 沒改」或「SOP 改了但表單還是舊的」。當表單本身就是一份可以 diff 的文字檔,這個落差就消失了。
幾個實務上的提醒
這個做法很好用,但有幾件事值得先知道。
每次執行都會建立一份「全新」表單。 腳本不會覆蓋舊表單。如果舊版已經發出去在收案了,新版是另一個連結、另一份回覆試算表。要嘛在改版前確認還沒開始收,要嘛就得處理兩份資料合併——我建議前者。
有些事 Google 表單做不到,程式碼也救不了。 例如 EQ VAS 的 0–100 刻度,Google 表單的線性刻度上限是 10,所以只能退而求其次用「文字欄位 + 數字範圍驗證」。AI 會告訴你這個限制,但它沒辦法變出 Google 沒提供的功能。同樣的,自動計分也不行——燈號判讀還是得由填寫者勾選,除非你另外寫試算表公式或
onFormSubmit
觸發器去反算。
量表的授權是另一回事。 這點跟技術無關,但更重要。EQ-5D-5L 由 EuroQol Foundation 授權,數位版(包含 Google 表單這類電子填答)需要另外登記取得數位版授權;KDQOL 由 RAND 提供,學術與非商業使用免費但仍需註冊。AI 幫你三分鐘做出表單,不代表你三分鐘就可以開始收案。技術門檻降低的時候,程序正當性反而更需要被留意。
個資保護要在發佈時處理。 只要表單收集病歷號或姓名,就要限制為機構內帳號填寫、關閉回覆摘要公開。這是發佈設定,不是程式碼能代勞的部分。
這件事真正打開的東西
我一開始只是想省下拉表單的時間。但做完之後,我意識到改變的其實是做決定的門檻。
過去在數位化一份量表之前,我會先在心裡估算:值得花那一小時嗎?如果只是想試試看某個欄位設計好不好用,通常答案是不值得,於是就算了。那些「算了」累積起來,就是一堆停在紙本、停在 Excel、停在「有空再說」的表單。
當成本降到三分鐘,「先做一版試試看」變成理所當然的選項。
差別不在我做得比較快,
而在我開始做那些原本不會去做的事。
如果你手上也有一份放很久的紙本表單,不妨試試看。把它整份貼給 AI,說一句「轉換成 Google Form」,看看會發生什麼事。
本文提到的兩份腳本(EQ-5D-5L 量表、腎病體適能篩檢紀錄單)皆為實際臨床使用版本。量表本身的著作權歸原開發單位所有,使用前請依規定取得授權。