Google表單的Gemini AI生成功能好用嗎?我測完最後還是回去寫了一行Apps Script
你有沒有過這種經驗?想偷懶用AI生成一張表單,結果AI生出來的東西看起來很像樣,實際拿來用卻處處不對勁,最後還是得自己動手改一遍。
我最近幫公司做下午茶訂購單,就是這個情境。Google表單內建的Gemini AI生成功能聽起來很方便——打幾句話描述需求,它就幫你把欄位排好。問題是排好的欄位經不起後續統計。
1. Problem Statement:
現象:用Google表單AI生成下午茶訂購單,欄位看起來都齊了,糖度、冰塊、價格都有,表單本身能正常填寫。
原因:AI生成欄位時不會替你考慮「這份資料之後要怎麼被程式處理」。它優先滿足的是「看起來像一張完整表單」,不是「這份資料能不能被自動化統計」。
具體出問題的地方:
- 糖度跟冰塊被塞進同一個欄位(比如「半糖微冰」當成一個選項),後續想用
Excel統計各糖度的訂購量,根本統計不出來——因為每個值都是獨一無二的字串組合,沒有兩筆會剛好一樣 - 價格欄位是自由文字輸入,員工填法五花八門:「65元」、「大約70」、「65塊」——這些字串丟進加總公式,直接讓計算結果報錯
影響:每張表單事後要花30到60分鐘手動對帳清資料,而且如果哪天負責的人換了,下次又是從零開始重新生成、重新踩同樣的坑。
2. Solution Architecture:
問題的本質不是「AI生成得不夠聰明」,是AI根本不知道你的下游需求是什麼。它沒看過你的 Excel 公式,不知道你要用COUNTIF,自然不會把欄位設計成方便統計的結構。
我的建構邏輯:用Google Apps Script (GAS)直接寫程式碼生成表單 + 把容易出錯的欄位拆開並加驗證規則 = 一次寫好,永久可重複用,資料品質有保障。
這不是「拋棄AI」,是換一個工具——表單生成這種結構固定、邏輯明確的任務,寫死規則比讓AI每次重新猜你的需求更穩定。普適痛點在這裡:任何需要靠表單收集結構化資料、又要後續統計的場景,都會撞上同一個問題。
3. Implementation:核心腳本
關鍵設計是把容易混在一起的欄位拆開,並對自由輸入欄位加驗證:
function createAfternoonTeaForm_0410() {
var form = FormApp.create('4/10(五) 公司下午茶訂購單');
form.setDescription('結標時間:4/9 16:00\n菜單參考連結:[可不可/麻古/下午茶]');
// 1. 基礎資訊
form.addMultipleChoiceItem()
.setTitle('部門')
.setChoiceValues(['業務部', '行政部', '財務部', '管理部'])
.setRequired(true);
form.addTextItem().setTitle('中文姓名').setRequired(true);
// 2. 飲料設定(拆分糖冰以利自動化統計)
form.addMultipleChoiceItem()
.setTitle('飲料店家')
.setChoiceValues(['可不可熟成紅茶', '麻古'])
.setRequired(true);
form.addTextItem().setTitle('飲料品項').setRequired(true);
// 數字驗證:防止髒資料混進後面的試算表
var priceValidation = FormApp.createTextValidation()
.setHelpText('請輸入純數字金額(例如:65)')
.requireNumber()
.build();
form.addTextItem().setTitle('飲料價格').setValidation(priceValidation).setRequired(true);
form.addListItem().setTitle('糖度').setChoiceValues(['正常糖', '半糖', '微糖', '無糖']).setRequired(true);
form.addListItem().setTitle('冰塊').setChoiceValues(['正常冰', '少冰', '微冰', '去冰']).setRequired(true);
Logger.log('發布網址: ' + form.getPublishedUrl());
}
[重點] 兩個設計決定了這份表單能不能被自動化統計:拆分欄位(糖度跟冰塊各自獨立成下拉選單,不是混在一個欄位的文字描述裡),以及輸入驗證(價格欄位強制純數字,擋掉「65元」「大約70」這類自由格式)。AI生成不會替你做這兩件事,因為它根本不知道你後面要接COUNTIF。4. 常見問題
| 問題 | 原因 | 解法 |
|---|---|---|
| 重複執行腳本會建出多張表單 | GAS每次執行FormApp.create都是新建,不是更新 |
把表單ID存起來,改用FormApp.openById更新既有表單,不要每次重新建 |
| 驗證規則沒生效 | setValidation要在addTextItem回傳的物件上呼叫,順序錯了會漏設 |
確認鏈式呼叫的順序:addTextItem()先回傳item物件,再接.setValidation() |
| 之後要換店家/日期要改腳本 | 店家清單寫死在程式碼裡 | 把可變動的部分(店家、日期、結標時間)抽成變數放在function最上面,改這幾行就能重複用 |
5. Conclusion:什麼時候該用GAS,什麼時候用AI生成就好
| 適合GAS | 適合AI生成 |
|---|---|
| 表單會重複使用,且結構固定(每次只改店家/日期) | 一次性、隨手用的簡單表單 |
| 後續資料要進試算表跑公式統計 | 只是收集意見,不需要精確統計 |
| 欄位邏輯複雜(需要拆分、驗證) | 欄位簡單,AI生成的結果剛好夠用 |
這件事讓我重新確認一個判斷準則:AI適合幫你快速生成初稿,但只要下游有明確的程式邏輯要接,寫死規則永遠比讓AI猜你的需求更穩。
下次你發現自己在AI生成的結果上反覆手動修正同一個地方,那大概就是該寫一行腳本把邏輯定下來的時候了。
本文為 BosonFlow 原創,轉載請標示出處。
需要流程自動化或Apps Script開發服務?歡迎來信: - Email:[email protected]
Comments ()