Google Apps ScriptGASGoogle Sheets自動化自訂函式

Google Apps Script 能做什麼?4 種用法與免費額度入門教學,Google 帳號內建的自動化工具

2026年7月4日·14 分鐘閱讀

前言

如果你每天泡在 Google 服務裡:試算表整理數字、Gmail 寄信、行事曆排會議,你的帳號其實內建一個免費自動化工具:Google Apps Script。它能指揮整套 Google 服務自動做事,不用買軟體、不用租伺服器。

這篇 Google Apps Script 教學一次講清楚:它是什麼、四種常見用法、免費額度,以及我實際用它解決問題的過程。

Google Apps Script 讓 Google 試算表與 Gmail 自動運作的示意圖
Google 帳號內建的免費小程式平台,讓試算表、Gmail、行事曆自己動起來

Google 試算表、Gmail 天天在用,重複的動作卻都是人在做

每件小事都不大,加起來卻吃掉一整段上午

這幾年我發現多數人的痛點其實不在「不會用工具」,真正綁死人的是一堆兩三分鐘的小事:每週把數字貼進報表、月初寄一輪內容大同小異的信、把 A 表的資料搬進 B 表。我在行銷公司做 AI 流程開發,遇過最有感的一次,是客戶的文章登記表裡幾十列標題全是超連結文字,我需要每一篇的純網址,只能一格一格右鍵、複製連結、貼到隔壁欄。做到第十列的時候我就知道,這種事不該由人來做。何況人手重複操作本來就容易出錯,稽核研究顯示大多數被檢查的試算表都找得出錯誤(Panko, 1998)。交給程式做,起碼它不會做到一半恍神。

這類工作有個共通點:規則明確、動作固定、發生在 Google 自家服務之間。規則講得出口的重複動作,就是最適合交給程式的動作。

自動化工具那麼多,為什麼先看 Google 帳號內建的這個?

市面上的自動化工具不少,n8n、Zapier 都能做類似的事,但它們要嘛得自己架、要嘛照用量收費。Google Apps Script 的定位不太一樣:它是 Google 官方內建在你帳號裡的小程式平台,天生就長在試算表、Gmail、日曆旁邊。要自動化的事情如果就發生在 Google 服務之間,用它最省事,而且免費。

我的習慣是先用它解決掉 Google 圈內的事,真的要跨到外部服務(例如社群平台、AI 模型)再考慮 n8n。工具是拿來省事的,殺雞不用牛刀。

Google Apps Script 是什麼?Google 帳號內建的免費自動化平台

Google Apps Script 要另外安裝嗎?打開試算表就能寫

Google Apps Script(常簡稱 GAS 或 Apps Script)不用安裝任何東西,也不用準備伺服器。打開任何一張 Google Sheets,點上方選單的「擴充功能」再點「Apps Script」,就會開出一個可以寫程式的編輯器,寫好按儲存就能跑。程式跑在 Google 的機器上,你關掉電腦它照樣工作。

對一般帳號來說它完全免費,只有用量上的限制(後面 FAQ 會講具體數字),以我這種內部工具的用量,連上限的邊都碰不到。

它跟試算表、Gmail、日曆是同一家人,天生就能互相操作

Apps Script 真正的優勢在它的出身:它就長在 Google 自家服務裡面。要讀寫試算表、寄 Gmail、動日曆、存雲端硬碟,都是一句話的事,不用申請金鑰、不用處理登入授權,因為你本來就登入著 Google 帳號。

同樣的事如果用其他工具做,光是「取得操作 Google Sheets 的權限」就是一整套流程。所以遇到這類需求,我的答案都一樣:只要事情發生在 Google 自家服務之間,Apps Script 幾乎永遠是最短路徑。

我不會寫程式,Google Apps Script 學得起來嗎?

現在這個時間點,你可以不用「學會」它,只要「會用」它。「讓不是工程師的人為自己寫程式」其實是一個正經的研究領域,叫 end-user programming(終端使用者開發,白話說就是使用者自己動手解決自己的問題),學界整理過整個領域的全貌(Ko et al., 2011)。當年研究者想盡辦法降低的那道門檻,現在被 AI 鏟平了大半:Apps Script 用的程式語言是 JavaScript,但你不需要自己從零寫,把需求講清楚讓 AI 產出、貼進編輯器就能用。這篇文章裡的每一段程式碼都是這樣來的,具體怎麼問,後面教學那段有現成的提問格式。

Google Apps Script 能做什麼?最常用的 4 種玩法

Google Apps Script 四種常見用法:自訂函式、定時觸發器、自動寄信、網頁應用程式
四種玩法各自解決不同的問題,可以互相搭配

試算表自訂函式:內建公式做不到的,自己加一個

Google Sheets 的公式庫再齊全,總有挖不到的東西。前面提到的那個痛,客戶登記表裡的「文章標題」欄是超連結文字,畫面上顯示標題、網址藏在文字背後,我的排名工具需要純網址才能查數據,但你翻遍內建公式,沒有任何一個能把超連結背後的網址挖出來。

Apps Script 可以自己發明公式。我寫了一個叫 GETLINK 的自訂函式,在儲存格裡像用 SUM 一樣用它,它就把那格超連結背後的網址抓出來。幾十列文章標題,一條公式全部變成純網址,右鍵複製的日子就此結束。

GETLINK 自訂函式把超連結標題轉成純網址的前後對照
左邊是藏著網址的超連結標題,一條公式之後變成右邊的純網址

整個函式就這幾行,貼進編輯器存檔,儲存格馬上多一個公式可以用:

// 自訂函式:把儲存格超連結背後的網址挖出來,用法 =GETLINK("A2")
function GETLINK(ref) {
  const cell = SpreadsheetApp.getActiveSheet().getRange(ref);
  const rich = cell.getRichTextValue();
  if (!rich) return '';
  if (rich.getLinkUrl()) return rich.getLinkUrl();
  const run = rich.getRuns().find(r => r.getLinkUrl());  // 部分文字帶連結的情況
  return run ? run.getLinkUrl() : '';
}

這裡還有一層設計:這個功能好幾個客戶的表都要用。與其把程式碼一張表一張表複製貼上,我把它做成 Apps Script 的「程式庫」,程式碼只放一份在中央,每張客戶表只掛幾行殼去引用它。當初會這樣做,是因為我貼到第三張表的時候突然意識到,哪天要改邏輯,我就得記得回來改每一張表,這種事我一定會漏。改成程式庫之後,中央改一次,所有表同步生效。

定時觸發器:時間到自動跑,不用人守著

Apps Script 可以設定「觸發器」,讓程式在固定時間自動執行:每天早上八點、每週一、每小時,都行。常見的用法像是每天自動整理一次表格、每週把統計數字寄給主管。它就是 Google 幫你養的一個鬧鐘,時間到了叫你的程式起床做事。

寫好要跑的函式,再到編輯器左邊的「觸發條件」選單掛上時間就行。像這個每天算一次 B 欄加總、把結果寫回表頭的例子:

// 每天自動統計:B 欄加總寫回 D1(觸發器選「時間驅動」→ 每日)
function dailySummary() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('訂單');
  const nums = sheet.getRange('B2:B').getValues().flat().filter(Number);
  const total = nums.reduce((a, b) => a + b, 0);
  sheet.getRange('D1').setValue('今日累計:' + total);
}

我自己的排名工具也有類似的設計,每週一早上十點自動更新客戶的關鍵字排名。不過那條流程牽涉到外部服務比較多,我是用 n8n 排的;如果整件事只在 Google 服務裡面打轉,Apps Script 的觸發器就夠用,還省下架 n8n 的功夫。

📖 延伸閱讀n8n 從 0 到 40 分入門攻略:Zeabur 雲端部署 x 8 大基本節點全解析

自動寄信通知:表格一有動靜,信就進信箱

Apps Script 寄 Gmail 是內建能力。搭配前面的觸發器或表單事件,就能做到「試算表多了一列,馬上寄信通知我」這種事。對接案的人特別實用:客戶在你網站上填了需求單,你手機當下就收到信,不用整天開著試算表盯。

搭配「表單提交時」觸發器,新的一列進來就把內容寄給自己:

// 表格多一列就寄信通知(觸發器選「提交表單時」)
function notifyNewRow(e) {
  const row = e.range.getRow();
  const data = e.range.getSheet().getRange(row, 1, 1, 4).getValues()[0];
  MailApp.sendEmail(
    'you@example.com',                  // 換成自己的信箱
    '網站來了一筆新需求',
    '內容:' + data.join(' / ')
  );
}

免費帳號每天可以寄給 100 位收件者,當通知用綽綽有餘;要拿來群發電子報就不夠了,那是另一種工具的事。

網頁應用程式:給你一個網址,讓外面的服務打得進來

前面三種玩法都是「Google 圈內」的自動化,第四種把門打開:Apps Script 可以把你的程式部署成網頁應用程式(Web App),部署完會拿到一個 Google 給的專屬網址,任何服務把資料送到這個網址,你的程式就會被喚醒,接住資料、照你寫的邏輯處理。

我用它做過兩個小功能。一個是工具箱首頁的意見回饋:使用者選分類、填內容、按送出,資料就送到 Apps Script 的網址,由它補上當天日期、寫進試算表最下面一列,我要看回饋,打開那張表就是全部。另一個是 IG 追蹤清單:網站上新增、刪除追蹤帳號,兩種操作送到同一個網址,由程式判斷要加一列還是刪一列。一段免費的小程式加一張試算表,就能接住網站的資料,連資料庫都不用租。

回饋表單資料流:網站表單送出,經 Apps Script 網頁應用程式,寫入 Google Sheets
回饋表單的資料流:網站收資料、Apps Script 當窗口、Google Sheets 存起來

核心就是一個 doPost 函式:資料送到你的網址,它就醒來接住,檢查、補日期、寫進表:

// 網頁應用程式入口:接住網站送來的資料,補上日期寫進試算表
function doPost(e) {
  const data = JSON.parse(e.postData.contents);
  if (!data.message) {                 // 不像樣的資料直接退回
    return ContentService.createTextOutput('bad request');
  }
  SpreadsheetApp.getActiveSheet()
    .appendRow([new Date(), data.category, data.message]);
  return ContentService.createTextOutput('ok');
}

📖 延伸閱讀工程師該自己做內部工具嗎?我用 Next.js 打造一套自用後台的實錄

Google Apps Script 教學:從打開編輯器到部署的實際流程

打開編輯器、貼上程式碼、按執行,中間只隔一次授權

第一次動手的流程很短:開一張試算表,點「擴充功能」進 Apps Script,把程式碼貼進編輯器,按執行。第一次執行時 Google 會跳出授權畫面,問你要不要允許這段程式操作你的試算表或信箱,按同意之後它就正式上工。到這裡為止,前面講的自訂函式、觸發器、寄信通知都做得出來,完全不需要「部署」。

Google Sheets 擴充功能選單中的 Apps Script 入口位置
入口就在試算表的「擴充功能」選單裡,點 Apps Script 直接開編輯器

程式碼不用自己寫:把需求講成三句話丟給 AI

編輯器打開了,程式碼從哪來?我的做法是講給 AI 寫(ChatGPT、Claude、Gemini 都行),講需求有固定格式,三句話就夠:在哪裡用、資料長什麼樣、要做什麼事。照這個格式問,AI 寫出來的程式八九不離十:

幫我寫一段 Google Apps Script,要貼在 Google 試算表的 Apps Script 編輯器裡用。
我的分頁叫「客戶名單」:A 欄是姓名、B 欄是 Email、C 欄是狀態。
我要的功能:每天早上九點,把 C 欄是「待回覆」的每一列整理成一封信,寄到 me@example.com。

兩個提醒。第一句「要貼在 Apps Script 裡用」不能省,不講的話 AI 可能給你一般網頁用的 JavaScript,貼進去跑不動。另外,貼上執行如果報錯,把錯誤訊息原封不動丟回去給 AI,通常一兩輪就修好。你全程不需要看懂程式,只要確認跑出來的結果對不對。

要讓外部服務打進來,才需要部署:三個步驟

只有第四種玩法(網頁應用程式)需要多做一步部署,因為你要跟 Google 要一個對外的網址:

  1. 在 Apps Script 編輯器右上角按「部署」,選「新增部署作業」,類型選「網頁應用程式」
  2. 「誰可以存取」這個選項,改成「所有人」。這步最容易錯:留在「只有自己」的話,外部服務打進來只會拿到一頁 Google 登入畫面而不是你的資料,而且重新部署時這個設定會被重設,改完程式記得回頭檢查
  3. 按下部署,複製它給你的網址,貼回你的網站或其他服務的設定裡
Apps Script 管理部署作業的設定畫面:類型選網頁應用程式,存取權選所有人後按部署
部署三步驟:① 類型選「網頁應用程式」② 存取權改成「所有人」③ 按部署

要提醒一件事:這個網址等於你程式的入口,拿到的人都能往裡面送資料。所以網址本身不要公開貼出來,程式裡也最好檢查一下收到的資料格式,不像樣的就不處理。我的 IG 追蹤清單就有擋:送進來的網址不是 Instagram 開頭的,直接退回。對外開門的東西,一定要順手加一道檢查,這個習慣不分工具大小。

📖 延伸閱讀IG 數據怎麼追蹤?用 n8n + Google Sheets 做一份免費社群數據報告

手上有一堆發生在試算表、Gmail 之間的重複小事,想自動化卻不知道從哪一件下手?我們幫企業盤點流程,用最省成本的工具組合把它們接起來。

看 AI 自動化開發服務

常見問題 FAQ

Q1:Google Apps Script 要收費嗎?免費額度有多少?

完全免費,沒有付費方案,只有用量上限。以一般免費 Gmail 帳號來說:每天可寄信給 100 位收件者、程式單次最多跑 6 分鐘、定時觸發器每天合計 90 分鐘、對外抓取資料每天 2 萬次。這些數字對個人工具和小團隊來說很寬裕,我的回饋表單加追蹤清單全開,每天用掉的量連 1% 都不到。付費版 Google Workspace 帳號的上限更高,但多數人用不到。

Q2:我完全不會寫程式,做得到嗎?

做得到,這篇文章裡的每一段程式都是我講需求、AI 寫出來的。第一次做建議挑一個最簡單的題目,例如「表格多一列就寄信通知我」,照教學那節的三句話提問格式跑通一次,後面的變化都只是規則不同而已。

Q3:讓程式動我的試算表和信箱,安全嗎?

Apps Script 的權限掌握在你自己手上:程式第一次執行時,Google 會明確列出它要求哪些權限(讀寫試算表、寄信等等),你同意了它才動得了。要留意的反而是兩件事:試算表的共用設定不要開成「知道連結的任何人可編輯」,以及部署出來的網頁應用程式網址不要公開張貼。至於資料本身,回饋內容、追蹤清單這類內部資料存在 Google 沒什麼問題;若是客戶個資、付款資料這種等級,就不該用這個架構了。

Q4:Apps Script 跟 Google 表單(Google Forms)有什麼不同?

Google 表單是現成的問卷工具,建好發連結,回覆自動進試算表,完全不用寫程式。如果你只是要收問卷,用表單就好,不用動到 Apps Script。Apps Script 的空間在「表單做不到的事」:自訂公式、定時任務、寄客製化的信,或是讓自己網站上的表單直接把資料寫進試算表,畫面完全是你的,使用者也不會被帶去 Google 的頁面。

Q5:事情變複雜之後,該繼續用 Apps Script 還是換 n8n?

我的分法只看一件事:事情發生在哪裡。整件事都在 Google 服務之間打轉,Apps Script 就夠,免費又不用架東西;一旦要串外部服務(社群平台、AI 模型、通訊軟體),或是流程長到需要一眼看清每一步的狀態,n8n 這種流程工具會順手得多。兩個也常常搭著用:n8n 負責跨服務的大流程,Apps Script 負責 Google 圈內的細活,實際怎麼分工可以看 n8n × Google Apps Script 協同作業教學

總結

Google Apps Script 是 Google 帳號裡內建的免費自動化平台,自訂函式補公式的不足、觸發器接手定時任務、寄信通知取代人工盯表、網頁應用程式讓外部服務打得進來,四種玩法涵蓋了辦公室裡大部分的重複性小事。我幫客戶評估自動化方案時的習慣一直沒變:先問這件事能不能用免費的積木搭起來,搭不起來再談花錢。工具會換,但「用最小的成本驗證需求」這個順序不會過期。

如果你手上也有一堆「每天都在重複、但一直沒空處理」的流程,想找人一起評估哪些能自動化、用什麼工具搭最省,歡迎看看我們的 AI 自動化導入服務,聊聊你的情境。

參考資料

同主題文章

AI 軟體開發