iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
AI & Data

告別每天的重複性任務:AI + n8n 中小企業自動化生存術系列 第 12

Day 12:進階流程控制—If、Switch、Merge、Loop 的實戰案例

  • 分享至 

  • xImage
  •  

昨天我們做的案例,是一條最簡單的直線流程:
把 Excel 檔下載下來 → 篩選出 AB 開頭的客戶 → 算好運費(固定每公斤 250 元) → 貼到 Google Sheets 報表,讓財務和客服可以使用。

這樣的流程雖然能解決眼前的需求,但也有個限制:它只能處理「AB 開頭」的客編。
如果今天公司想要把「非AB開頭」客編的資料存在另外一個 Google Sheet 檔案呢?

所以我們需要在流程裡多加一個「判斷」:先確認客編是不是 AB 開頭,再決定要把資料送去哪一份 Google Sheet。這時候,就該用到 If 節點了。

If Node 實戰案例

在原本的流程裡,我們是先用 Filter 節點篩選出 AB 開頭的客編,接著才把資料寫進 Google Sheet。
https://ithelp.ithome.com.tw/upload/images/20250925/20124621JZQXHOpuIR.png

但現在我們要進階,把 Filter 拿掉,改成在 Edit Fields 算完運費之後,直接接上一個 If 節點。
https://ithelp.ithome.com.tw/upload/images/20250926/20124621QoceU1vdNp.png

在 If 節點裡,我們要設定一個條件,判斷「客戶編號」是不是以 AB 開頭。

步驟如下:

  1. 在左側的 Input 裡找到 客戶編號 欄位,拖拉到條件設定區。
  2. 在條件下拉選單裡選擇 Starts with。
  3. 在右邊的文字框輸入 AB。

這樣一來,If 節點就會自動幫我們把資料分成兩條:
True Branch:符合條件(AB 開頭)的訂單
False Branch:不符合條件(非 AB 開頭)的訂單

執行這個 Node 之後,從右側的 Output 也能看到,n8n 已經把資料拆分好,22 筆進了 True,11 筆進了 False。
https://ithelp.ithome.com.tw/upload/images/20250926/20124621260ILVfnmN.png

接下來,我們只要把這兩條分別接到不同的 Google Sheet,就完成了自動分流。
上方的 Google Sheet Node 接收 AB開頭客編的資料,存到名稱為「客戶編號AB訂單」的檔案;
下方的 Google Sheet Node 接收 非AB開頭客編的資料,存到名稱為「客戶編號非AB訂單」的檔案;
https://ithelp.ithome.com.tw/upload/images/20250926/20124621wPf6TyT36d.png

剛剛我們用 If 節點,已經成功做到「AB 與非 AB」的二分法。這樣的做法,在只有兩種情況的時候非常好用。

但是,實際的業務場景往往不只兩種情況。
例如:非 AB 的客編裡面,還有 CT 開頭、MG 開頭,而且公司希望這些不同的客戶群,能分別存在不同的 Google Sheet,方便負責不同客戶的業務各自查看。

如果還是用 If,一個一個去寫條件,就會變得很繁瑣。
這時候,最適合的工具就是 Switch 節點。

Switch Node 實戰案例

在 If 案例裡,我們只能分成「AB」和「非 AB」兩類。
但實際情境中,非 AB 的客編可能還有 CT 開頭、MG 開頭,公司希望把這些資料分流到不同的 Google Sheet,方便不同業務查看。

這時候,我們就要改用 Switch 節點。

Switch 節點設定步驟

  1. 在 Routing Rules 裡,設定判斷欄位為客戶編號
  2. 新增多組條件:
    • Starts with AB → Output 命名為「AB 開頭客編」
    • Starts with CT → Output 命名為「CT 開頭客編」
    • Starts with MG → Output 命名為「MG 開頭客編」
      https://ithelp.ithome.com.tw/upload/images/20250926/20124621a8swl2HbXf.png

運作結果
Switch 節點會自動幫我們把資料分流:

  • AB 開頭 → 22 筆
  • CT 開頭 → 6 筆
  • MG 開頭 → 5 筆

接下來,這三個輸出就能分別接到三個 Google Sheet Node,把不同客戶的訂單資料,存在不同的表單裡。
https://ithelp.ithome.com.tw/upload/images/20250926/20124621vktSdFWYg9.png


剛剛我們透過 Switch 節點,已經可以把不同開頭的客編分流到各自的 Google Sheet。
但接下來有一個更真實的需求:不同客戶的運費單價都不一樣。

例如:

  • VIP 客戶可能是 230 元/公斤
  • 一般客戶是 250 元/公斤
  • 其他合作夥伴可能又有不同價格

如果還是用固定數字去算,結果一定會錯。
這時候,我們就需要先去查一份「客戶運費單價表」,再把單價帶回訂單資料,最後才正確算出運費。

這就是 Merge 節點能派上用場的地方。

Merge Node 實戰案例

節點流程
我們準備了兩份資料:

  • Input 1(Extract from File):Excel 訂單資料,包含客戶編號、重量等資訊。
  • Input 2(Get row(s) in sheet):Google Sheet 單價表,包含客戶編號、每公斤單價。
    https://ithelp.ithome.com.tw/upload/images/20250926/20124621DaFMO5sojc.png

接著在 Merge 節點裡,設定以下參數:

  • Mode:選擇 Combine。
  • Combine By:選擇 Matching Fields。
  • Fields to Match:輸入「客戶編號」,作為兩份資料的對應 key。
  • Output Type:選擇 Enrich Input 1,意思是用單價表補充訂單資料。
    https://ithelp.ithome.com.tw/upload/images/20250926/20124621NBseRTrhNT.png

運作結果
執行之後,每一筆訂單資料就會自動帶上對應的「每公斤運費」。
接下來只要再加上計算運費的欄位(重量 × 單價),就能得到正確的運費結果。
https://ithelp.ithome.com.tw/upload/images/20250926/20124621kxNiYLxZoP.png

Loop Over Items 實戰案例

情境說明
在實務上,一個 Excel 檔案裡常常會包含多個工作表(Sheets)。
例如:

  • Sheet1:倉庫1包裹
  • Sheet2:倉庫2包裹
  • Sheet3:倉庫3包裹
    因此,我們需要讓流程能夠「逐一讀取每個工作表」,並且重複執行同一套處理流程。

節點流程

  1. 用 Code Node 建立清單
    因為目前 n8n 沒辦法自動抓出 Excel 裡到底有多少個 Sheet,所以我們先自己建立一個清單,指定要處理哪幾個。
    在 Code Node 裡輸入以下程式碼:
// 要處理的 Sheet 清單
const sheetNames = ["Sheet1", "Sheet2", "Sheet3"];

const output = [];

for (const name of sheetNames) {
  output.push({
    json: { sheetName: name },
    binary: items[0].binary // 保留原本的 Excel 檔案
  });
}

return output;

https://ithelp.ithome.com.tw/upload/images/20250926/20124621rHZntMZZb7.png

這樣會輸出三筆資料,每筆都有:

  • json.sheetName → 後面流程可以用來指定要讀的工作表
  • binary → 保留原始 Excel 檔案,確保後面 Extract 節點能正常讀取
  1. Loop Over Items 設定
    在 Loop 節點裡,把 Batch Size 設定為 1。
    這代表一次只處理一筆資料,也就是一次讀一個 Sheet。

  2. Extract from File 動態帶入 Sheet Name
    接著,在 Extract from File (XLSX) 節點的 Sheet Name 欄位,不要直接寫死名稱,而是改成用變數:
    {{$json.sheetName}}
    這樣流程每次跑 Loop 時,會自動把當前 item 的 sheetName 帶進去。
    第一次跑就讀 Sheet1,第二次跑讀 Sheet2,第三次跑讀 Sheet3。
    https://ithelp.ithome.com.tw/upload/images/20250926/20124621A5ZnrKi2zE.png

運作效果
執行後,n8n 就會依序把 Excel 裡三個 Sheet 的資料都讀進來,然後再送到後面的 Merge → Edit Fields → Switch → Google Sheets,整條流程就能自動處理多個工作表的訂單。

https://ithelp.ithome.com.tw/upload/images/20250926/20124621eFSEkOtFWD.png

小結

到這裡,我們已經把同一個物流訂單案例,拆解成四個進階應用:

  1. If Node
    用來做「二分支判斷」:例如 AB 開頭的訂單 → 寫進 A 報表,其他訂單 → 寫進 B 報表。
  2. Switch Node
    用來做「多分支判斷」:例如 AB、CT、MG 不同開頭的客編,各自分流到不同 Google Sheet。
  3. Merge Node
    用來「補充資料」:把訂單資料與客戶單價表合併,讓每筆訂單都帶上正確的運費單價。
  4. Loop Over Items
    用來「批次重複處理」:同一份 Excel 裡有多個工作表,就能一個一個讀取,再套用同一條運算流程。

透過這四個案例,你可以看到 n8n 的威力不只是在「自動化」動作,更能夠像寫程式一樣,有條件判斷、分支路線、資料合併,以及批次處理。

從明天開始,我們要把自動化的範例,從內部報表轉到社群發文自動化
也就是說,不再只是處理檔案和數據,而是直接幫你把文章、圖片,自動排程發佈到社群平台(例如 FB/IG/Threads)。
想知道怎麼用 n8n 幫你「一鍵發文」,記得繼續跟上 Day 13!


上一篇
Day11:每天手動整理 Excel 報表煩到爆?用 n8n 自動搞定只要幾秒!
下一篇
Day 13:每天切換各社群平台很累?n8n 幫你自動化發文
系列文
告別每天的重複性任務:AI + n8n 中小企業自動化生存術14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言