我們來講doGet程式碼及成果
var row = parseInt(e.parameter.row);
var action = e.parameter.action;
e:和 onFormSubmit 觸發器一樣,這是一個事件物件,但這次它包含了從 URL 傳來的查詢參數。
e.parameter.row 和 e.parameter.action:這兩行程式碼會從網址中讀取 row 和 action 這兩個參數的值。
舉例來說,如果主管點擊的網址是 .../exec?row=5&action=approve,那麼 row 會是字串 "5",action 會是字串 "approve"。
if (!row || row < 2) {
return ContentService.createTextOutput("錯誤:row 參數不正確");
}
// ...
var status = (action === "approve") ? "已核准" : "已退回";
var now = new Date();
這段程式碼先進行基本的錯誤檢查,確保 row 參數是有效的數字(至少大於等於 2,因為第一列通常是標題)。如果不正確,則回傳一個錯誤訊息。
接著,它根據 action 的值,將 status 變數設定為「已核准」或「已退回」。
now 變數則儲存了當前的時間。
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var statusCol = headers.indexOf("狀態") + 1;
var timeCol = headers.indexOf("審核時間") + 1;
// ...
sheet.getRange(row, statusCol).setValue(status);
sheet.getRange(row, timeCol).setValue(now);
程式碼會先讀取試算表的標題列,找到「狀態」、「審核時間」和「Email」欄位的位置。這樣做的好處是,即使欄位順序改變了,程式碼仍能正確找到位置。
接著,它會根據 URL 傳來的 row 參數,精準定位到該筆申請資料所在的列,並將對應的「狀態」欄位更新為「已核准」或「已退回」,同時在「審核時間」欄位寫入當前時間。
var email = sheet.getRange(row, emailCol).getValue();
if (email) {
MailApp.sendEmail({
to: email,
subject: "您的申請結果",
body: "您的申請已被「" + status + "」。\n審核時間:" + now.toLocaleString()
});
}
這段程式碼會先讀取該筆申請資料中員工的 Email。
接著,它會判斷是否有取得有效的 Email 地址,如果有的話,就會使用 MailApp.sendEmail 服務,自動發送一封電子郵件給員工,通知他們申請的最新結果。
return ContentService.createTextOutput("已更新狀態:" + status);
最後,doGet 函數會回傳一個簡單的文字頁面,顯示「已更新狀態:...」,讓點擊連結的使用者(主管)知道操作已經成功完成。
當我們填好表單
我們就會收到
如果我們點按按鈕,會跳轉到一個網頁並顯示狀態
而前面員工的gmail就會收到回信
然後試算表這邊會更新狀態