這次我們來製作一個請假系統,請假系統顧名思義就是需要核准制度的,所以首先我們先創建一個google表單來幫我們收回應。
再利用google表單生成的試算表去使用擴充功能的GAS。
function onFormSubmit(e) {
var sheet = e.range.getSheet();
var row = e.range.getRow();
var rowData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
e:這個參數是 Google Apps Script 在觸發時自動傳入的「事件物件」,裡面包含了許多有用的資訊,例如是哪一個範圍 (range) 觸發了這個事件。
e.range.getSheet():從事件物件中取得觸發表單回應的試算表。
e.range.getRow():取得這次新提交的資料所在的列號。
sheet.getRange(...):根據取得的列號,讀取該列的所有資料,並存入 rowData 這個陣列中。
// 用欄位名稱抓欄位位置
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nameCol = headers.indexOf("姓名") + 1;
var leaveTimeCol = headers.indexOf("請假時間") + 1;
var reasonCol = headers.indexOf("事由") + 1;
var emailCol = headers.indexOf("Email") + 1;
var name = rowData[nameCol - 1];
var leaveTime = rowData[leaveTimeCol - 1];
var reason = rowData[reasonCol - 1];
var email = rowData[emailCol - 1];
headers:讀取試算表第一列的標題列(也就是欄位名稱),例如「姓名」、「請假時間」等。
headers.indexOf("姓名") + 1:這行程式碼非常聰明,它利用 indexOf 方法,根據文字名稱(例如「姓名」)來找到該欄位在陣列中的索引位置,然後加 1 轉換成試算表的列數。這樣做的好處是,即使未來表單的欄位順序改變了,程式碼也不用修改,還是能正確找到對應的資料。
rowData[nameCol - 1]:利用上一步找到的欄位位置,從 rowData 陣列中提取出對應的員工姓名、請假時間、事由和電子郵件。
// 建立審批連結 (Web App URL + 參數)
var webAppUrl = "https://script.google.com/macros/s/AKfycbzksURapAEF5NK1-yzZIxYthxIpCSvJNZGZsQRrn8MgdOxH-JIBxiqexhaHkZHvDNeJeg/exec";
var approveUrl = webAppUrl + "?row=" + row + "&action=approve";
var rejectUrl = webAppUrl + "?row=" + row + "&action=reject";
webAppUrl:這是一個 Google Apps Script 部署後的 Web 應用程式網址。
approveUrl 和 rejectUrl:這兩行程式碼在 Web App 網址後面,加入了額外的查詢參數 (?row=...&action=...)。這些參數就像是傳遞給網址的訊息,告訴 Web App:「當有人點擊這個連結時,請對第 row 列的資料執行**approve(核准)或reject(退回)**操作。」
// 寄信給主管
MailApp.sendEmail({
to: "manager@gmail.com",
subject: "📝 待審核申請:" + name + " - " + new Date().toLocaleString(),
htmlBody:
...
});
}
MailApp.sendEmail:這是 Google Apps Script 內建的郵件服務,用來發送電子郵件。
to:指定收件人的電子信箱,這裡寫的是主管的信箱。
subject:郵件的標題,包含申請人的姓名和提交時間,方便主管快速辨識。
htmlBody:這是最主要的部分,用 HTML 語法來設計信件的內容和排版。
<h2>、<table>
:用來呈現標題和結構化的表單資料,看起來更整齊。
${...}:這是 JavaScript 的模板字串(Template literals),可以在 HTML 內容中直接嵌入前面取得的變數,例如 ${name} 會被替換成實際的員工姓名。
<a>
:用來建立超連結,也就是信件中的**「✅ 核准」和「❌ 退回」**兩個按鈕。點擊這些按鈕後,會導向前面建立的 approveUrl 或 rejectUrl,觸發後續的審批動作。
明天我們在來講下一段程式碼和結果