Google Form 上的選單選項
各時段示意圖
設計流程圖
拆解活動時段 gs Code
重點紀錄
- 該 GAS 是綁定在 Google Sheets 上,而不是 Google Forms
- gs Code 抓取 Google Sheet 部分,為了方便手動執行測試,會判斷是從 Google Form 還是 GAS 內直接執行的
- Range.insertCheckboxes() 是指把指定範圍內的 cell 變成 checkbox 並設定勾選值
/**
* Google Forms 提交後,自動拆解 A、B、C 時段。
*
* C 欄:原始報名選項
* D 欄:A 時段
* E 欄:B 時段
* F 欄:C 時段
*/
function onFormSubmit(e) {
// 從試算表取得工作表
const sheet = e && e.range
? e.range.getSheet()
: SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form_Responses");
if (!sheet) {
throw new Error("找不到 Form_Responses 工作表。");
}
// 表單提交:使用實際提交列
// 手動執行:使用最後一列
const row = e && e.range
? e.range.getRow()
: sheet.getLastRow();
if (row <= 1) {
throw new Error("目前沒有可處理的報名資料。");
}
// 讀取 C 欄報名選項
const selectedValue = sheet.getRange(row, 3).getDisplayValue();
// 解析報名選項
// 例如 A + C (08:00 - 13:00) → ["A", "C"]
const selectedGroups = selectedValue
.split("(")[0]
.split("+")
.map(group => group.trim());
// 基本時段
const groups = ["A", "B", "C"];
// 產生 CheckBox 勾選狀態
const checkboxValues = groups.map(group =>
selectedGroups.includes(group)
);
// D、E、F 欄
const range = sheet.getRange(row, 4, 1, 3);
// 建立 CheckBox
range.insertCheckboxes();
// 寫入勾選狀態
range.setValues([checkboxValues]);
}
設定觸發條件
活動類型:提取表單時,在 以事件為準的觸發條件 內說明
An installable form submit trigger runs when a user responds to a form,There are two versions of the form-submit trigger該筆記是屬於後者,意思是當 Google Sheets 接收到從 Google Forms 送來資料時會觸發,而該 Blog 筆記 - [GAS] 自行定義回覆 Email,則是屬於前者
- one for Google Forms itself
- one for Sheets if the form submits to a spreadsheet
因為 function 名稱都慣性取名為 onFormSubmit,所以誤會兩件事情
- 直覺 GAS 是綁定在 Goole Forms 上,但就該筆記並不是
- 以為跟簡單觸發條件 onOpen、doGet 一樣會自動觸發,不需要手動建立
時段拆解開後,在 Google Sheets 內另外開一個 Sheet 來當成統計頁面,透過設定公式 CountIf() 來進行統計,小活動用最簡單方式來達成就好
=COUNTIF(Data!D2:D,TRUE)
=COUNTIF(Data!E2:E,TRUE)
=COUNTIF(Data!F2:F,TRUE)
實際執行







沒有留言:
張貼留言