欸,你還在手動複製貼上嗎?
哈囉,今天要來聊一個我覺得超酷,但好像很多人不知道或是不敢碰的東西:Google Apps Script,我們通常簡稱 GAS。老實說,我一開始也覺得「蛤?寫程式?不要吧...」,但真的碰了之後才發現,哇,根本是懶人救星!🚀
簡單講,你每天在 Google Sheets、Gmail、Google Docs 上面做的那些重複性動作,像是「把表單 A 的資料複製到表單 B」、「每週一早上寄一封固定的報告信」、「把問卷結果整理成文件」... 這些鳥事,通通可以讓 GAS 幫你自動完成!而且,它是免費的!
所以這篇的重點很簡單:Google Apps Script 沒那麼可怕,只要掌握幾個基本指令,你就能打造出屬於自己的第一個自動化小工具,從此告別無止盡的複製貼上地獄。 😉
一個實際案例:讓 Sheet 自動寄出催繳信
光說不練太虛幻了,我們直接看個例子。想像一下,你是一個社團的總務,每個月都要對著一長串 Google Sheet 名單,找出還沒繳錢的人,然後一個一個複製他們的 Email,再手動寄信提醒他們... 是不是光想就覺得累?
這時候 GAS 就能派上用場了!我們可以寫一小段程式,讓它做到:
- 每天早上自動檢查 Google Sheet。
- 如果「繳費狀態」這一欄是「未繳」,而且還沒寄過通知。
- 就自動抓取該學員的「姓名」和「Email」。
- 然後用你的 Gmail 帳號,寄出一封客製化的提醒信,信裡還可以自動帶入對方的名字喔!
- 寄出後,再自動把「通知狀態」改成「已寄出」,避免重複寄送。
你看,整個流程從手動至少要花個十幾二十分鐘(如果人多的話更久),變成完全不用你動手。這就是 GAS 的魔力!是不是很讚!
怎麼做?新手入門三步驟
好啦,我知道你可能在想「聽起來很棒,但我真的不會寫程式...」。別怕,我會用最白話的方式帶你走一遍。真的,你只需要知道幾個關鍵字就能開始了。
第一步:打開你的「武器庫」- Apps Script 編輯器
這個東西藏在哪裡呢?很簡單,打開任何一個你想自動化的 Google Sheet,然後在上面的選單找到「擴充功能」 > 「Apps Script」。 點下去,就會跳出一個新的分頁,那個長得有點陽春的介面,就是你的戰場啦!
第二步:認識幾個「咒語」- 常用指令解析
Apps Script 是基於一種叫做 JavaScript 的語言,但你不用學會全部。 我們只要先認識幾個跟 Google Workspace 溝通的「專屬咒語」就好。你可以把這些想像成在跟 Google 大神下指令:
SpreadsheetApp:這就是跟 Google Sheet 溝通的起點。想對試算表做任何事,都要先呼叫它。可以把它想成是「試算表大神」。
-getActiveSpreadsheet():跟大神說:「我現在正在用的這個試算表檔案」。
-getSheetByName('工作表名稱'):跟大神說:「幫我找一個叫做『工作表名稱』的分頁」。
-getRange('A1:C10'):跟大神說:「幫我框選出 A1 到 C10 這個範圍的格子」。你也可以用另一種寫法getRange(起始列, 起始欄, 總列數, 總欄數)來指定範圍。
-getValues():跟大神說:「把這些格子裡面的『值』全部拿出來給我」。它會給你一個二維陣列,聽起來很專業,其實就是一堆資料排排站而已。
-setValue('你想寫入的內容'):跟大神說:「幫我在指定的格子裡,寫進這些字」。
-GmailApp.sendEmail('收件人', '主旨', '信件內容'):這就是另一個大神「Gmail 大神」的咒語,直接幫你寄信!超好用!
老實說,光是會排列組合上面這幾個指令,你大概就能解決 80% 的 Google Sheet 自動化問題了。真的不騙你。
第三步:組合咒語,完成你的第一個魔法!
我們來把剛剛催繳信的邏輯,用上面的咒語「翻譯」一次。程式碼看起來會像這樣(我加了很多中文註解,讓你更好懂):
function sendReminderEmails() {
// 1. 取得我們要操作的試算表和工作表
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('10月份繳費名單'); // 記得改成你的工作表名稱
// 2. 取得所有資料的範圍,這裡假設資料從第2列開始,總共有4欄 (姓名, Email, 繳費狀態, 通知狀態)
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 4);
const data = range.getValues();
// 3. 一筆一筆檢查資料
for (let i = 0; i < data.length; i++) {
const row = data[i];
const name = row;
const email = row;
const paymentStatus = row;
const notificationStatus = row;
// 4. 如果「繳費狀態」是"未繳",而且「通知狀態」是空的,就寄信!
if (paymentStatus === '未繳' && notificationStatus === '') {
const subject = `【繳費提醒】${name} 同學,您好`;
const body = `親愛的 ${name} 同學,\n\n提醒您,本月份的費用尚未繳交喔!\n\n感謝您的配合!`;
// 真正寄信的指令!
GmailApp.sendEmail(email, subject, body);
// 5. 寄信後,在「通知狀態」那格寫上"已寄出"
// 注意:陣列是從0開始算,但 getRange 是從1開始算,所以要加1
sheet.getRange(i + 2, 4).setValue('已寄出');
}
}
}
把這段程式碼貼到你的 Apps Script 編輯器,存檔。然後手動按一下上面的「▷ 執行」按鈕。第一次執行時,Google 會跳出來問你一堆授權,這是正常的,因為你要授權給這個程式去讀取你的試算表和用你的 Gmail 寄信。勇敢地按下「允許」就對了! 跑完之後,去你的「寄件備份」看看,是不是魔法就發生了?
不只是 Sheet,它還能做更多!
學會了基本功,你會發現一片新大陸!GAS 不只能搞 Google Sheets,它幾乎可以串通所有的 Google 服務。
- Google Docs:自動生成報告。你可以寫一個 GAS,把 Google Sheet 裡的數據或圖表,自動填入一個 Google Doc 範本,變成一份每週的業績報告。
- Google Forms:客製化回覆。有人填完問卷後,不只寄一封制式的「感謝填寫」,你可以根據他的答案,用 GAS 判斷並寄給他不同的後續資訊。
- Google Calendar:自動新增行程。例如,在 Sheet 裡規劃好一系列活動的時間地點後,一鍵讓 GAS 幫你把所有活動都新增到 Google Calendar 上。
- 建立簡單的網頁應用:你甚至可以用 GAS 做出一個簡單的網頁,讓沒有 Google 帳號的人也可以跟你互動,或是當作一個簡單的資料查詢頁面。
可能性真的很多,完全取決於你的想像力(還有解決懶人問題的決心 😂)。
跟 Zapier 或 Make 這種工具有什麼不一樣?
你可能會問,市面上不是有很多像 Zapier、Make (以前的 Integromat) 這種「無程式碼」(No-code) 的自動化工具嗎?它們跟 GAS 有什麼差別?這問題問得很好,我自己也常用,所以來做個簡單比較。
| 比較項目 | Google Apps Script (GAS) | Zapier / Make |
|---|---|---|
| 成本 | 基本上是免費的!除非你用到超大量的 API 呼叫,但一般人用不太到那程度。 | 有免費方案,但功能和執行次數都有限。複雜一點的流程或用量一大,就得付月費了。 |
| 彈性 | 超高!你想得到的邏輯,只要寫得出來,幾乎都能實現。可以做很細緻的資料處理。 | 比較受限。你只能用它「預設好」的觸發 (Trigger) 和動作 (Action)。 有時候想做個簡單的判斷,就得繞一大圈或升級方案。 |
| 學習曲線 | 需要懂一點點程式邏輯,至少要看得懂上面那幾行咒語。對完全沒碰過程式的人來說,一開始會有點痛。 | 非常低!幾乎就是用滑鼠點一點、連連看,很直覺。 對非技術背景的人超級友善。 |
| 整合範圍 | 主要強在 Google 自家生態系 (Workspace) 內的整合。要跟外部工具(例如 Slack、Trello)溝通,會比較麻煩一點。 | 強項就是跨平台整合!可以輕鬆串接幾千種不同的 App,從臉書、IG 到各種專案管理工具。 |
我自己是覺得,如果你的需求主要圍繞在 Google 文件、試算表、Gmail 之間,而且想要做一些比較精細的客製化邏輯,那 GAS 絕對是首選,CP 值爆表。但如果你的需求是需要串接很多非 Google 的外部服務,而且你一秒鐘都不想看到程式碼,那 Zapier 或 Make 會是比較快、比較省事的選擇。
有趣的是,這兩者也可以結合。例如,用 Zapier 接收一個外部事件,然後觸發一段 GAS 來做複雜的 Google Sheet 處理。
新手一定會踩的坑(我都幫你踩過了)
寫程式最煩的就是除錯了,尤其對新手。這裡列出幾個我剛開始時,浪費最多時間的笨問題,希望能幫你省點力氣:
- 大小寫、全形半形打錯字:這是 90% 新手錯誤的來源!`SpreadsheetApp` 你寫成 `spreadsheetApp` 或 `SpreadSheetApp` 就是不行。程式碼很笨,一個字都不能錯。
- 忘記授權或權限不夠:第一次執行一定要記得點「允許」。有時候你複製別人的程式碼,它需要用到你沒開的服務(例如他用了 Google Drive 但你沒開),也會出錯。這時候就要去編輯器裡的「服務」那邊手動把它加上去。
- 陣列的 index 從 0 開始,但 Range 從 1 開始:這超煩!用
getValues()拿出來的資料,第一筆的編號是 `[0]`,但你要寫回儲存格用 `getRange(1,1)` 時,第一格卻是 `(1,1)`。常常會在這裡搞混,導致資料寫錯位置。 - 超過執行時間限制:Google 為了防止伺服器被濫用,每個 GAS 程式單次執行的時間上限是 6 分鐘(免費帳號)。 如果你要處理上萬筆資料,很容易就超時。這時候就需要把程式碼寫得更有效率,例如用「批次處理」的方式,一次讀取所有資料、處理完、再一次寫入,而不是讀一筆、寫一筆。
- 搞不懂官方文件:說真的,Google 的官方文件雖然最準確,但寫得像字典一樣,對新手不太友善。 這時候我會建議多參考一些台灣開發者的教學文章或影片,像是 iT 邦幫忙上面就有很多實戰分享,他們通常會用更貼近實際案例的方式來講解,會好懂很多。
結語:你的第一個自動化任務是什麼?
好啦,不知不覺也聊了這麼多。希望你看完之後,對 Google Apps Script 不再那麼害怕,反而有點躍躍欲試。它就像是你在 Google Workspace 裡的一根免費魔法棒,雖然一開始要念對咒語有點挑戰,但一旦成功施法,帶來的便利性絕對會讓你上癮。
從最簡單的「自動複製貼上」開始,踏出你的第一步吧!相信我,當你成功讓電腦為你工作,而你去泡咖啡的那一刻,成就感真的超爆棚的!
現在換你啦!你工作或生活中有什麼一直手動處理的煩人小事嗎?你第一個想用 Apps Script 來自動化的任務是什麼?在下面留言分享吧!搞不好你的點子可以啟發別人喔!👇
