工程師視角:用 n8n 打造 Google Sheets 企業級偽資料庫
您的企業是否還在為 Google Sheets 的髒資料與 API 限制所苦?本文由資深工程師 Eric 揭秘,如何運用 n8n 打造穩定、低成本的企業級『偽資料庫』。深入掌握 Google Cloud OAuth2、程式碼清洗 Node 與防護 API Rate Limit 的策略。立即掌握專業技巧,讓您的自動化流程不再「炸開」!
Google Sheets 變身強大後端?n8n 自動化串接的「防雷」實戰指南:OAuth2、資料清洗與排程策略
我是 Eric,浪花科技的資深工程師。在我的職業生涯中,有一句話我大概講了八百遍:「Excel 不是資料庫!」但現實是,客戶愛死 Google Sheets 了。行銷要看報表、業務要看名單、老闆要看儀表板,他們不想登入 WordPress 後台,他們只要一個「可以分享、可以篩選」的試算表。
身為工程師,我們不能總是跟使用者對著幹。與其強迫他們學習 SQL,不如我們用技術手段,把 Google Sheets 變成一個「偽資料庫」。而 n8n 正是實現這個目標的神兵利器。
今天這篇文章不談簡單的「表單存入試算表」(網路上教學很多),我要談的是「資深工程師視角」的自動化架構。如何搞定最讓人頭痛的 Google Cloud OAuth2 驗證?如何處理髒資料?如何確保自動化流程不會因為 API Rate Limit 而炸開?這是一篇讓你從「會用」進階到「精通」的實戰筆記。
為什麼選擇 n8n 而不是 Zapier 或 Make?
在開始寫 Code 之前,我們得先談談「錢」和「控制權」。
- 成本控制: 當你的 WordPress 網站每天有 500 筆訂單,或者你需要每 5 分鐘同步一次庫存,Zapier 的帳單會讓你心臟驟停。n8n 可以 Self-hosted(自架),任務執行次數幾乎是免費的,只取決於你的伺服器效能。
- 資料隱私: 醫療、金融或企業內部資料,你真的放心讓它經過第三方 SaaS 平台嗎?自架 n8n 讓資料流都在你自己的掌控中。
- 複雜邏輯: Google Sheets 的資料往往很「髒」(日期格式亂跳、電話號碼含全形字)。n8n 的
Code Node讓我們可以用 JavaScript 進行強大的資料清洗,這是圖形化介面難以做到的。
第一關:大魔王 Google Cloud Platform (GCP) 設定
很多人卡在 n8n 連接 Google Sheets,不是因為不懂邏輯,而是被 Google Cloud Console 的介面嚇退。Google 的權限設定非常嚴格(這也是好事),以下是 2025 年最新版的「防雷」設定流程。
1. 建立專案與啟用 API
別傻傻地用預設專案。請為你的自動化建立一個獨立的 GCP Project。你需要啟用兩個關鍵 API:
- Google Sheets API:讀寫試算表數據。
- Google Drive API:雖然我們操作的是 Sheets,但 n8n 有時需要 Drive API 來讀取檔案列表或權限。
2. 設定 OAuth 同意畫面 (Consent Screen)
這是新手最容易卡關的地方。如果你是自用(n8n 架在自己管轄的範圍),User Type 請選擇 External (外部),但在發布狀態保持 Testing (測試中) 即可。
注意: 雖然是測試版,但你必須將自己的 Google Email 加入「Test users (測試使用者)」清單中,否則你會永遠無法登入。
3. 憑證 (Credentials) 的回呼網址
在建立 OAuth 2.0 Client ID 時,Google 會要求輸入 Authorized redirect URIs。請回到你的 n8n 後台,在建立 Google Sheets Credential 的畫面中,複製那串 https://你的n8n網域/rest/oauth2-credential/callback 貼過去。少一個斜線、多一個空格,都會導致 Error 400: redirect_uri_mismatch。
第二關:資料清洗 (Data Cleaning) —— 工程師的價值所在
把 WordPress 的資料「直接」丟進 Google Sheets 通常是災難的開始。例如 WordPress 的日期格式可能是 2025-05-20 14:00:00,但 Google Sheets 可能會把它當成純文字,導致客戶無法用日期篩選。
在 n8n 中,我們應該在寫入 Google Sheets 之前,加入一個 Code Node 進行資料標準化。
範例:標準化電話與日期
// 支援經典編輯器的程式碼區塊
const results = [];
for (const item of items) {
let phone = item.json.billing_phone;
let dateStr = item.json.date_created;
// 1. 強制移除電話中的非數字字符 (如空格、橫線)
phone = phone.replace(/\D/g, '');
// 2. 如果是台灣號碼,確保格式統一 (例如移除開頭的886換成0)
if (phone.startsWith('886')) {
phone = '0' + phone.substring(3);
}
// 3. 處理日期,轉換為 Google Sheets 喜歡的格式 (ISO 8601)
const dateObj = new Date(dateStr);
// 這裡可以使用 luxon 套件 (n8n 內建) 進行更精確的時區處理
results.push({
json: {
...item.json,
formatted_phone: phone,
formatted_date: dateObj.toISOString().split('T')[0] // 只取 YYYY-MM-DD
}
});
}
return results;
這段程式碼雖然簡單,但能確保你的 Google Sheets 永遠整潔。這就是「資料工程」與「隨便串串」的區別。
第三關:寫入策略 (Append vs. Update)
在 n8n 的 Google Sheets 節點中,最常用的兩個操作是 Append (新增) 和 Update (更新)。
Append (新增資料) 的陷阱
如果你的 Webhook 重複發送了怎麼辦?例如使用者重新整理了結帳頁面,你的 Google Sheets 就會出現兩筆一樣的訂單。這在會計對帳時會殺人。
最佳實踐: 永遠優先考慮使用 Upsert (有則更新,無則新增) 的邏輯。雖然 Google Sheets 節點沒有直接的 Upsert 選項,但你可以這樣設計工作流:
- Lookup: 先用 Google Sheets 節點的
Get Many操作,根據 Unique Key (例如訂單編號 ID) 搜尋是否已存在該筆資料。 - If Node: 判斷搜尋結果。如果為空 (Empty),走 True 路徑 (執行 Append);如果有資料,走 False 路徑 (執行 Update)。
第四關:API Rate Limit 與錯誤處理
Google API 是有每分鐘請求限制的 (Quota)。如果你一次倒進去 1000 筆資料,流程絕對會報錯。這就是為什麼我說 n8n 是企業級工具,因為它有強大的錯誤處理機制。
Split In Batches (分批處理)
不要試圖一次處理所有資料。在讀取或寫入大量數據前,加上一個 Split In Batches 節點,設定為每批 10-50 筆。並在迴圈中加入一個 Wait 節點,讓流程暫停 1-2 秒。這叫做「指數退讓」的簡化版,能有效避免觸發 Google 的 429 Too Many Requests 錯誤。
Error Trigger (失敗通知)
自動化最怕的就是「默默失敗」。請務必在 n8n Workflow 的設定中,建立一個 Error Workflow。當主流程失敗時 (例如 Google Token 過期、網路斷線),自動發送 LINE 或 Slack 通知給工程師。
總結:把 Google Sheets 當作「唯讀」介面
最後,Eric 要給大家一個觀念:盡量不要讓人類和機器同時編輯同一個欄位。
最好的架構是:n8n 負責寫入 (Write),人類負責讀取 (Read) 或在特定的「備註欄位」填寫資料。如果讓人類隨意修改由程式產生的數據,下次同步時,這些修改可能會被覆蓋,或者導致同步錯誤。
自動化是一條不歸路,一旦你體驗過資料自動流轉的快感,你就再也回不去手動複製貼上的日子了。但請記得,穩定的架構比快速的開發更重要。
延伸閱讀,打造更強的自動化帝國:
- 資料同步慢半拍?Webhook vs. Polling 終極對決:資深工程師教你如何讓 WordPress 不再空轉
- 你的 n8n 自動化是『玻璃大砲』嗎?資深工程師的『容錯』與『重試』設計聖經
- WooCommerce 訂單同步不是接上就好!資深工程師教你用 n8n 打造『零錯誤、高智能』的自動化工作流
你的企業還在用 Excel 手動整理報表嗎?或者你的自動化流程常常莫名中斷?
浪花科技專精於高複雜度的 WordPress 與 n8n 系統整合。我們可以幫你打造穩定、高效的自動化數據戰情室。
常見問題 (FAQ)
Q1: n8n 連接 Google Sheets 時出現 Error 400: redirect_uri_mismatch 怎麼辦?
這通常是因為 Google Cloud Console 中的「已授權的重新導向 URI」設定錯誤。請確保你填入的網址與 n8n 提示的 callback URL 完全一致(包含 https:// 和結尾的路徑),且 n8n 必須架設在公開可訪問的網域上(localhost 通常無法通過驗證,除非使用 Tunnel 工具)。
Q2: Google Sheets 的資料可以即時同步回 WordPress 嗎?
可以,但 Google Sheets 本身沒有原生的 Webhook 功能(除了使用 Apps Script)。因此,通常需要使用 n8n 的 Polling(輪詢)模式,每隔一段時間去檢查 Google Sheets 有無變更。建議頻率不要太高,以免觸發 API 限制。
Q3: 為什麼我的 n8n 流程過了一段時間後,Google 驗證就失效了?
這通常發生在 OAuth2 的 Refresh Token 過期或被撤銷。如果你的應用程式處於 GCP 的「Testing」模式,Token 只有 7 天有效期。解決方案是將應用程式發布為「Production」狀態(即使只是內部使用),這樣 Refresh Token 就不會輕易過期。






