嗯... 最近有人在問 Google Apps Script 是什麼
唉... 老實說,每天打開電腦,總有些事就是一直在重複。複製、貼上、寄信、整理試算表... 你知道的,就是那些很瑣碎但又不能不做的事。😶
最近剛好有朋友在問,就順便整理一下。有個東西叫 Google Apps Script,我自己是覺得,它就是為了解決這種煩躁感而生的。如果你跟我一樣,對每天做重複的事情感到有點厭煩,那這東西...嗯... 或許可以看看。
所以,它到底是什麼?
講白話一點?它就是一個能讓你跟 Google 旗下各種服務「下指令」的工具。像是你可以對 Google Sheet 說:「嘿,如果 A 欄的數字大於 100,就把那一整列變成紅色。」或是對 Gmail 說:「每天早上八點,幫我寄一封報告給老闆。」
它用的語言基礎是 JavaScript,但先別被「程式語言」這四個字嚇到。說真的,一開始你甚至不需要懂很多,只要會改改範本,就可以做到很多事了。你可以把它想像成... 嗯... 一種跟 Google 溝通的「魔法咒語」吧。你只要學會幾個簡單的咒語,就能讓它幫你自動做很多事。很酷吧?
怎麼開始我的第一個 Script?
開始之前不用安裝任何東西,這點我覺得很棒。 只要你有 Google 帳號,就可以。我們直接從最常用的 Google Sheet (試算表) 開始,最單純。
- 首先,打開你的 Google 雲端硬碟,新增一個 Google 試算表。就... 一個全新的、空白的就好。
- 接著,點擊上面選單的「擴充功能」,然後選擇「Apps Script」。 點下去,就會跳出一個新的分頁,那就是寫程式碼的地方。
- 那個新分頁,就是你的「腳本編輯器」。你會看到一個框框,裡面有一些預設的字,像是 `function myFunction() { ... }`。我們就是要在那裡面寫我們的「魔法咒語」。
來寫一個真正有用的東西:自動化表單回應
「Hello World」那種範例太無聊了,我們來做個實際點的。想像一下,你做了一個活動報名用的 Google 表單,你希望只要有人填單,就自動在你的 Google 日曆上新增一個行程提醒。這超實用對吧?
第一步:建立表單和試算表
先去 Google 表單建立一個簡單的報名表,至少要有「活動名稱」、「活動日期」、「Email」這幾個欄位。然後,在「回覆」分頁,點擊那個綠色的試算表圖示,把回應連結到一個新的 Google 試算表。這樣,所有填寫的資料就會自動跑到那張表上。
第二步:撰寫我們的 Script
現在,打開那份連結好的 Google 試算表,跟著上面的步驟進入 Apps Script 編輯器。把原本的程式碼都刪掉,然後貼上這段:
function onFormSubmit(e) {
// 這段是當表單提交時會自動執行的區塊
// 1. 取得表單送過來的資料
// e.values 裡面就裝著使用者填的所有答案,像是一個陣列
const eventName = e.values; // 假設第二欄是活動名稱
const eventDate = new Date(e.values); // 假設第三欄是活動日期
const guestEmail = e.values; // 假設第四欄是參加者的 Email
// 2. 找到你的 Google 日曆
// getPrimaryCalendar() 就是抓你預設的那個日曆
const calendar = CalendarApp.getDefaultCalendar();
// 3. 在日曆上建立活動
// 這裡就是真的把事情加到日曆上
calendar.createEvent(eventName, eventDate, eventDate, {
description: '這是一個透過 Apps Script 自動新增的活動!',
guests: guestEmail,
sendInvites: true // 這會自動寄邀請信給參加者,超方便
});
// 在 Log 裡面留個紀錄,方便我們檢查有沒有跑成功
Logger.log('已成功新增活動: ' + eventName);
}
嗯... 我解釋一下上面那段在幹嘛好了。`e.values` 就像一個袋子,裝著使用者剛剛填寫的所有答案。`[1]` 代表試算表的第二欄 (程式是從 0 開始算的,這點有點煩),所以你要根據你自己的表單欄位順序去調整數字。`CalendarApp` 則是 Apps Script 內建的咒語,專門用來跟 Google 日曆溝通。 最後 `createEvent` 就是真的把活動建立下去的動作。
第三步:設定「觸發條件 (Trigger)」
光寫好程式碼還不夠,我們要告訴 Google:「欸,要在『有人填表單』的時候,才去跑這段程式喔!」這個動作就叫設定觸發條件。
- 在腳本編輯器左邊,點擊那個像時鐘的圖示,也就是「觸發條件」。
- 點擊右下角的「新增觸發條件」。
- 在設定視窗裡,把「選取事件來源」改成「從試算表」,然後「選取事件類型」改成「提交表單時」。
- 然後按儲存。它會跳出一個視窗要你授權,就勇敢地按下去,允許它存取你的試算表和日曆。這是必要的,不然它沒權限幫你做事。
好了,這樣就完成了!現在你只要去填一次你的 Google 表單,過幾秒鐘,去你的 Google 日曆看看,應該就會看到多出一個新的活動了!是不是... 有點神奇的感覺?
綁定式 vs. 獨立式,哪個好?
對了,剛剛我們做的這種,程式碼直接依附在 Google 試算表裡的,叫做「Bound Script (容器綁定式腳本)」。 另外還有一種是自己獨立一個檔案,不屬於任何試算表或文件的,叫「Standalone Script (獨立腳本)」。
這兩個有什麼差?...我想想怎麼說比較好。大概是這樣:
| 類型 | 什麼是綁定式腳本 (Bound Script)? | 什麼是獨立腳本 (Standalone Script)? |
|---|---|---|
| 存在感 | 嗯...就是直接黏在某個檔案上的小程式。像是附生在Google Sheet上的藤蔓?🤔 檔案刪了它也跟著掰掰。 | 這個就自由多了。自己一個檔案,存在你的雲端硬碟裡,像個總指揮,可以去操作好幾個不同的Google服務。 |
| 優點 | 很直覺,要處理哪個檔案就從哪裡開。權限也比較單純,通常就是管好自己依附的那個檔案。 | 用途廣泛,可以做成網頁應用,或是當作一個中央控制中心,一次指揮 Drive、Gmail 跟 Calendar。 |
| 什麼時候用 | 當你只是想「強化」單一檔案功能時。例如:自動整理這張試算表的資料、在文件中新增自訂選單等。 | 當你的任務需要跨越多個服務時。例如:掃描你整個雲端硬碟裡特定名稱的檔案,然後整理成一份報告寄出去。 |
新手的話,我自己是覺得從「綁定式」開始最沒壓力。先專心搞定一個檔案的自動化就好。
卡關了怎麼辦?官方文件 vs. 在地社群
寫這種東西,卡關是正常的,我自己也常常打錯字或忘記某個指令。有兩個地方你一定要知道。
第一個是 Google 官方的開發者文件。 它的內容超級完整,所有 Google 服務能用的指令都查得到,這是最權威的來源。不過呢,老實說,它都是英文,而且寫得...嗯...很「工程師」,有時候不太好懂。
這時候,第二個地方就很有用:台灣的技術部落格或 Facebook 社團。你用中文去搜「Apps Script 教學」或你遇到的問題,常常會找到很多前輩分享的心得。 官方文件是字典,但台灣社群分享的範例,常常更「接地氣」,會教你解決一些很台式的辦公室問題,例如處理中文地址格式、或是產生符合台灣會計習慣的報表之類的。我覺得這點真的蠻有趣的,有時候比看官方文件還快解決問題。
幾個新手一定會踩的坑
最後分享幾個我剛開始玩的時候,浪費最多時間的地方,希望你可以避開:
- 大小寫打錯:JavaScript 這語言...很龜毛,`calendar` 跟 `Calendar` 是完全不一樣的東西。打錯一個字,整段程式就罷工。
- 忘記授權或權限不夠:第一次執行腳本時,Google 會問你一堆授權問題,如果你不小心按到拒絕,或後來改了腳本需要更多權限(例如本來只讀試算表,後來要寫入日曆),它就會失敗。 記得去觸發條件那邊重新授權。
- 陣列的 index 從 0 開始:就像我上面說的,程式裡數東西習慣從 0 開始,所以試算表的第一欄,在程式裡要用 `[0]` 來抓。這點真的要花時間習慣。
- 觸發條件設錯:有時候程式寫對了,但就是不動。結果檢查半天,發現是觸發條件設成「每次編輯時」而不是「提交表單時」。...別問我怎麼知道的。🥲
今天聊了這麼多,不知道有沒有讓你手癢也想玩玩看?學這個,重點不是要變多強的工程師,而是把那些每天被偷走的時間,一點一滴拿回來。我覺得光是這樣,就蠻值得的。
你最想自動化的,又是什麼煩人的工作呢?在下面留言聊聊吧!👇
