目錄
n8n 串接 Google 試算表:自動讀取、新增與更新資料
Google 試算表是最常見的「輕量資料庫」:報名名單、訂單、庫存、客戶清單。n8n 可以自動讀取、寫入、更新試算表,並在有新資料時觸發流程。
準備:授權
- n8n Cloud:建立 Google Sheets 憑證時直接登入 Google 即可。
- 自架:需要先在 Google Cloud 建立 OAuth 用戶端並啟用 Google Sheets API,完整步驟見 憑證管理。
試算表的格式
n8n 把第一列當作欄位名稱,之後每一列是一筆資料(一個 item):
| 姓名 | 場次 | 狀態 | |
|---|---|---|---|
| 王小明 | ming@example.com | 10/20 台北 | 已確認 |
| 李小華 | hua@example.com | 10/27 台中 | 待確認 |
讀取後,每一列會變成:
{ "row_number": 2, "姓名": "王小明", "Email": "ming@example.com", "場次": "10/20 台北", "狀態": "已確認" }
欄位名稱建議簡短且不要重複,避免使用合併儲存格。
常用操作
在 Google Sheets 節點中選擇:
| 操作 | 說明 |
|---|---|
| Get Row(s) | 讀取資料列,可以設定篩選條件(例如狀態 = 待確認) |
| Append Row | 在最後新增一列 |
| Update Row | 依照某個欄位找到對應的列並更新 |
| Append or Update Row | 找得到就更新,找不到就新增(最常用) |
| Delete Rows | 刪除列 |
| Clear | 清空工作表 |
| Create | 建立新的試算表或工作表 |
選擇試算表與工作表時,可以從清單中挑選,也可以貼上試算表的網址。
欄位對應
新增或更新時,Mapping Column Mode 有兩種方式:
- Map Each Column Manually:每個欄位分別填入運算式,例如「姓名」填
{{ $json.name }} - Map Automatically:輸入資料的欄位名稱和試算表欄位相同時自動對應
更新:用哪一欄比對
Update / Append or Update 需要指定 Column to match on,例如用「Email」欄比對。請選擇不會重複的欄位。
監聽新資料:Google Sheets Trigger
Google Sheets Trigger 會定期檢查試算表,在有新增的列或列被修改時觸發。適合「有人在試算表中新增一筆訂單,就自動處理」的情境。
注意它是以輪詢方式運作(例如每分鐘檢查一次),不是即時的。
完整範例:活動報名自動化
需求:使用者填寫報名表 → 寫入試算表 → 寄出確認信 → 通知管理員。
[Form Trigger] ─▶ [Google Sheets:Append or Update] ─▶ [Send Email:確認信] ─▶ [Telegram:通知管理員]
1. Form Trigger
n8n 內建表單,不需要 Google 表單:
- Form Title:
講座報名 - 欄位:
- 姓名(Text,必填)
- Email(Email,必填)
- 場次(Dropdown:10/20 台北、10/27 台中)
發布後會得到一個表單網址,可以直接分享。
2. 寫入試算表
Google Sheets 節點,操作 Append or Update Row:
- Column to match on:
Email - 姓名:
{{ $json['姓名'] }} - Email:
{{ $json.Email }} - 場次:
{{ $json['場次'] }} - 狀態:
已報名 - 報名時間:
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
用 Email 比對,同一個人重複報名只會更新資料,不會新增重複的列。
3. 寄出確認信
Send Email 或 Gmail 節點:
{{ $('Form Trigger').item.json['姓名'] }} 您好:
感謝報名「{{ $('Form Trigger').item.json['場次'] }}」場次講座,
我們已收到您的報名,活動前一天會再寄送提醒。
因為上一個節點是 Google Sheets,所以用 $('Form Trigger') 讀取表單中的原始資料。
4. 通知管理員
接上 Telegram 或 Slack 節點,傳送「新報名:姓名 / 場次」。
進階:每天寄出報名統計
[Schedule 每天 18:00] ─▶ [Google Sheets:Get Rows] ─▶ [Summarize:依場次計數] ─▶ [Send Email]
Summarize 節點設定:Fields to Split By 選「場次」,Aggregation 選 Count,就能得到每個場次的報名人數。
常見問題
資料量很大時很慢或出錯
Google Sheets API 有速率限制。大量寫入時:
- 盡量一次寫入多列,而不是每列呼叫一次
- 使用 Loop Over Items 分批,中間加上 Wait
資料超過數萬筆時,建議改用真正的資料庫(PostgreSQL、MySQL),或 n8n 內建的 Data Tables(依版本提供)。
讀到的數字變成字串
試算表的儲存格格式會影響讀取結果。比較或計算前用 Number() 轉換。
找不到欄位
確認第一列是欄位名稱,且名稱前後沒有多餘的空白。修改欄位名稱後,需要在節點中重新載入欄位。
更新於 2026年10月12日