Gmail、Drive、日曆、表單
內建服務讓幾行就能動 Google Workspace。第一次呼叫會擴張授權範圍,請只開用得到的服務。每日寄信、日曆寫入都有 配額。
寄信:MailApp 與 GmailApp
MailApp.sendEmail(收件人, 主旨, 內文) 最單純。需要抄送、HTML、附件、以目前使用者身分操作收件匣時,用 GmailApp。
function sendSummary() {
const sheet = SpreadsheetApp.getActiveSheet();
const count = Math.max(sheet.getLastRow() - 1, 0);
MailApp.sendEmail(
Session.getActiveUser().getEmail(),
"今日筆數",
"工作表共有 " + count + " 列資料。"
);
}
簡易 onEdit 不能寄信。把這個函式掛在選單,或做成每天一次的可安裝觸發。
雲端硬碟:DriveApp
function exportCopy() {
const ss = SpreadsheetApp.getActive();
const folder = DriveApp.getFolderById("資料夾ID");
DriveApp.getFileById(ss.getId()).makeCopy("備份-" + Date.now(), folder);
}
文件範本填值:DriveApp.getFileById(範本ID).makeCopy(...),再用 DocumentApp.openById 對內文 replaceText("{{姓名}}", 值)。這是很常見的「Sheet → 合約 PDF」流程。
日曆:CalendarApp
function addEventFromRow() {
const [title, start, end] = SpreadsheetApp.getActiveSheet()
.getRange("A2:C2")
.getValues()[0];
CalendarApp.getDefaultCalendar().createEvent(title, start, end);
}
start / end 必須是 Date。儲存格請設成日期時間格式,再用 getValues() 而不是 getDisplayValues()。
表單:FormApp 與 onFormSubmit
把 Google 表單回應連到試算表後,用可安裝的「提交表單時」觸發:
function onFormSubmit(e) {
const named = e.namedValues; // { "電子郵件": ["ada@example.com"], ... }
const email = named["電子郵件"][0];
MailApp.sendEmail(email, "已收到報名", "謝謝,我們會再通知。");
}
e.values 是依欄位順序的陣列;e.namedValues 用題目當鍵,題目一改鍵就變,正式環境常改讀試算表列較穩。