重點一句話
嗯...簡單講,就是用 Google Apps Script,讓試算表裡的資料,自己跑到 Gmail 去做事。省時,少犯錯。
為什麼要學 Apps Script?...嗯,主要是懶
說真的,就是為了懶。很多每天在做的事...複製、貼上、寄信...很煩。Apps Script 就像 Google 給的一個小機器人,你教它一次,它就一直做。 它是用 JavaScript,一種網頁上很常見的語言,所以不算太難學。 而且不用安裝東西,打開試算表,從「擴充功能」就能找到它。 很多人拿它跟 Excel 的 VBA 比,概念有點像,但 Apps Script 是活在雲端的。
這東西能串連 Google 家族的各種服務,像試算表、文件、Gmail、日曆等等。 想像一下,表單收到回覆,就自動寄出一封確認信。 或是每天早上,自動檢查試算表裡的數據,做成報告寄給我。這就是它存在的意義,把重複的事情自動化。
5 個串連試算表和 Gmail 的場景
我想了幾個比較實際的用法,大概是這幾種:
- 場景一:每日數據回報。 試算表裡有每天更新的業績或流量,設定好每天早上九點,自動把關鍵數字抓出來,寄一封簡短的報告給自己或團隊。
- 場景二:客製化郵件大量發送。 這有點像 Mail Merge。 試算表第一欄是名字,第二欄是 Email,第三欄是他們買的產品。可以寫一個腳本,一次寄信給所有人,但每個人的信裡稱謂和提到的產品都不同。
- 場景三:表單回覆後的自動確認信。 當有人填了 Google 表單,資料會進到試算表。 這時觸發一個腳本,馬上寄一封「我們收到您的回覆了」的確認信給填寫者。
- 場景四:庫存或指標低於門檻的警示。 試算表裡有庫存數量。寫個腳本每小時檢查一次,當某個品項的庫存低於 10 件時,立刻寄一封「庫存警告!」的信給採購。
- 場景五:簡易的任務指派通知。 在試算表的一個欄位填上負責人的 Email,腳本偵測到這個欄位被填寫時,就自動寄信通知那個人:「你有新任務了」,信件內容包含任務說明的欄位。
這些場景的比較...大概是這樣
把這幾個場景整理一下,可能看得更清楚。
| 場景 | 主要目的 | 觸發方式 | 感覺...複雜度 | 適合誰 |
|---|---|---|---|---|
| 每日數據回報 | 定時取得資訊 | 時間驅動 (Time-driven) | 低。就是抓資料寄信。 | 需要每日看報表的人。 |
| 客製化郵件 | 一對多,但內容不同 | 手動執行 (從選單或按鈕) | 中。要處理迴圈跟字串。 | 行銷、活動主辦。 |
| 表單確認信 | 即時回應 | 表單提交時 (onFormSubmit) | 中。需要處理事件物件 e。 | 任何用表單收件的人。 |
| 庫存警示 | 條件監控 | 時間驅動 (Time-driven) | 中高。邏輯判斷比較多。 | 電商、倉管。 |
| 任務指派 | 狀態變更通知 | 編輯時 (onEdit) | 高。要精準判斷編輯的欄位。 | 專案經理、團隊協作。 |
實際怎麼做?...拆解其中一個
我們拿最單純的「每日數據回報」當例子。假設 A1 儲存格是「今日訪客數」,B1 是數字。我們想每天早上九點把這個數字寄出來。
首先,你要進到腳本編輯器。在試算表上面選單找「擴充功能」 > 「Apps Script」。
然後把預設的 `myFunction` 換成這樣的東西:
function sendDailyReport() {
// 連結到當前的試算表
var sheet = SpreadsheetApp.getActiveSheet();
// 取得 A1 和 B1 儲存格的資料
var metricName = sheet.getRange('A1').getValue();
var metricValue = sheet.getRange('B1').getValue();
// 設定收件人、主旨和信件內容
var recipient = 'your-email@example.com';
var subject = '每日數據報告 - ' + new Date().toLocaleDateString();
var body = metricName + ': ' + metricValue + '\n\n這是自動發送的郵件。';
// 寄出信件
<a href="https://mailtrap.io/blog/google-scripts-send-email/" target="_blank" class="blogHightLight_css nobox">GmailApp</a>.sendEmail(recipient, subject, body);
Logger.log('報告已寄出至 ' + recipient);
}
這段程式碼...嗯...就是幾個步驟。`SpreadsheetApp` 是用來跟試算表溝通的。 `getRange().getValue()` 就是去拿指定格子的值。然後 `GmailApp.sendEmail` 就是把信寄出去。 很直白。
寫完程式碼要記得存檔。然後設定觸發條件,這才是自動化的關鍵。
寫程式前的準備...一些設定
在執行之前,有幾件事要做。第一次跑的時候,Google 會跳出一個授權視窗,問你同不同意這個腳本讀取你的試算表、用你的 Gmail 寄信。 這是必要的安全機制,必須同意才能繼續。
再來是設定「觸發條件」(Trigger)。 在編輯器左邊有個像時鐘的圖示,點進去。
- 按右下角的「新增觸發條件」。
- 「要執行的函式」選 `sendDailyReport`。
- 「選取活動來源」選「時間驅動」。
- 「選取時間型觸發條件類型」選「日計時器」。
- 「選取時間」就選「上午 8 點至 9 點」。
- 儲存。這樣就行了。
這樣設定完,腳本就會每天早上在那個時間點自己跑一次。
注意事項...會踩到的坑
看起來很美好,但有些限制要注意。Google 不是讓你無限使用的。
最主要的是「配額」(Quotas)。比如,用 `GmailApp.sendEmail`,個人 Gmail 帳號一天大概只能寄 100-150 封信。 Google Workspace 帳號會多很多,可能到 1500 封。 這些限制在 Google 官方文件上都有寫,但有時候寫得很技術性。台灣有些部落格,像是電腦玩物,會用更白話的方式解釋這些限制的實際影響,或是提供一些繞過去的方法。 把官方文件和在地經驗對照看,會比較有感覺。
還有,腳本執行時間不能超過 6 分鐘。如果你的程式跑太久,會被強制中斷。所以處理大量資料時要特別小心,要想辦法優化。
最後是權限問題。`onEdit` 這種觸發條件,如果不是你本人在編輯試算表,它能做的事情會受限,有時候甚至沒辦法寄信。這是為了安全,避免別人亂改你的試算表就觸發奇怪的動作。
結語...所以,下一步是?
嗯...Apps Script 就是這樣。一個黏膠,把 Google 的服務黏在一起。不用變成多厲害的工程師,只要懂一點點邏輯,就能省下很多時間。 從最簡單的回報開始,慢慢擴充,其實很有用。
開始想一下,你工作上有什麼每天都在重複做的複製貼上?那可能就是你第一個可以自動化的目標。
換你試試看:
如果你能用 Apps Script 自動化一件事,你會想用在哪個場景?是自動寄報告,還是處理表單回覆?在下面留言分享你的想法吧。
