Google Sheets 變身強大後端?n8n 自動化串接的「防雷」實戰指南:OAuth2、資料清洗與排程策略

2026/01/24 | API 串接與自動化, N8N大補帖, 全端與程式開發

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 選項,但你可以這樣設計工作流:

  1. Lookup: 先用 Google Sheets 節點的 Get Many 操作,根據 Unique Key (例如訂單編號 ID) 搜尋是否已存在該筆資料。
  2. 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) 或在特定的「備註欄位」填寫資料。如果讓人類隨意修改由程式產生的數據,下次同步時,這些修改可能會被覆蓋,或者導致同步錯誤。

自動化是一條不歸路,一旦你體驗過資料自動流轉的快感,你就再也回不去手動複製貼上的日子了。但請記得,穩定的架構比快速的開發更重要。

延伸閱讀,打造更強的自動化帝國:

你的企業還在用 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 就不會輕易過期。

 
立即諮詢,索取免費1年網站保固