我将围绕"循环批量处理+多分支聚合"核心逻辑撰写博文,先拆解Loop与Merge节点的配置技巧,再通过Excel批量校验实操落地知识,结构图采用CSDN适配的简洁语法确保正常显示。
n8n实战营Day2课时2:Loop+Merge节点进阶·Excel批量校验实操
上一节我们掌握了HTTP请求与条件分支的用法,但企业场景中更常见"批量处理"需求------比如批量读取Excel中的客户信息、逐个校验格式后汇总结果。本节课的核心就是解决这类问题:Loop节点实现"重复执行同一操作",Merge节点搞定"多分支数据汇总",最终通过"Excel批量数据校验"实战,让你掌握从"单条处理"到"批量落地"的关键能力。
一、Loop节点:批量处理的"自动化流水线"
Loop节点本质是"循环执行器",能将数组形式的数据拆分为单条,依次传递给下游节点处理,处理完成后再进入下一条,直到所有数据都执行完毕。比如Excel中有100条客户数据,Loop能自动实现"取第1条→校验→取第2条→校验→...→取第100条→校验"的全自动化。
1.1 核心配置:循环模式与触发条件
n8n的Loop节点有两种核心模式,90%的批量场景用"For Each Item"即可,二者区别如下:
| 循环模式 | 核心逻辑 | 适用场景 | 配置要点 |
|---|---|---|---|
| For Each Item(默认) | 将数组数据"逐条拆分",依次执行下游逻辑 | 批量校验、批量发送、批量查询(如100条数据逐个校验) | 选择"Array to Loop Through"(待循环数组,如{{ $node["Excel Reader"].json["data"] }}) |
| While(条件循环) | 满足指定条件时持续循环,不满足则停止 | 动态次数循环(如"直到获取到非空数据为止") | 设置"Condition"(循环条件,如{{ $node["HTTP Request"].json["data"] }}为空) |
1.2 关键避坑点与优化技巧
-
避坑点1:循环数据必须是数组
Loop节点仅能处理数组格式数据,若上游节点输出非数组(如单条数据),需先通过"Split In Batches"节点转换为数组,否则会报错"Not an array"。
-
避坑点2:下游节点数据引用
循环过程中,下游节点需引用"Loop Item"(当前循环项)的数据,格式为
{``{ $json["字段名"] }},而非{``{ $node["Loop"].json["字段名"] }}(后者是整个数组,非单条数据)。 -
优化技巧:设置循环延迟
批量调用API时(如批量发送短信),为避免触发API频率限制,可在Loop下游加"Delay"节点,设置500ms延迟(根据API文档调整)。
-
优化技巧:循环结果收集
在Loop内部通过"Set"节点标记每条数据的处理状态(如"校验通过""格式错误"),方便后续汇总统计。
1.3 Loop节点工作流程图
结构图格式[
是 否 上游节点输出数组数据(如Excel的100条记录) Loop节点模式:For Each Item 拆分下一条数据 第1条数据 下游处理逻辑(校验/发送/查询) 标记处理状态(通过/失败) 是否还有数据? 循环结束进入Merge节点聚合
]
文字版逻辑:上游输出数组→Loop拆分单条→下游处理→标记状态→循环至所有数据完成→进入聚合环节。
二、Merge节点:多分支数据的"聚合器"
批量处理中,数据往往会按条件分成多个分支(如"校验通过""手机号格式错误""邮箱格式错误"),Merge节点的作用就是将这些分支的结果"合并成一个数组",方便后续汇总导出或统计分析。它解决了"多分支数据分散,难以统一处理"的痛点。
2.1 核心配置与聚合模式
Merge节点的核心是"选择聚合的分支"和"定义聚合后的数据结构",常用聚合模式为"Combine"(合并为数组),配置步骤如下:
-
添加Merge节点,选择"Mode"为"Combine"(合并模式);
-
点击"Add Input",依次添加需要聚合的分支(如"校验通过分支""手机号错误分支""邮箱错误分支");
-
(可选)配置"Output Field",自定义聚合后的数据字段名(默认为"data");
-
聚合后的数据会以数组形式输出,每个元素包含对应分支的处理结果。
2.2 字段匹配技巧与场景应用
-
技巧1:统一多分支字段结构
聚合前需确保各分支输出的字段一致(如都包含"姓名""手机号""处理状态"),可在每个分支末尾加"Set"节点统一字段,避免聚合后数据缺失。
-
技巧2:添加分支标识
在各分支通过"Set"节点添加"分支类型"字段(如"校验通过""手机号错误"),聚合后可快速筛选不同状态的数据。
-
典型场景1:批量校验结果汇总
将"通过""错误"分支数据聚合,导出为Excel统计表,包含每条数据的状态。
-
典型场景2:多来源数据整合
将Excel、表单、数据库三个来源的客户数据,通过Merge节点聚合为一个数组,再统一处理。
2.3 Loop+Merge协同工作流程图
结构图格式[
双格式正确 手机号错误 邮箱错误 Excel读取数组数据 Loop节点拆分单条数据 数据校验逻辑(手机号+邮箱格式校验) 校验结果 分支1:标记"校验通过 分支2:标记"手机号错误 分支3:标记"邮箱错误 Merge节点模式:Combine 聚合为统一数组包含所有数据及状态 导出至Excel/统计分析
]
文字版逻辑:Excel数据经Loop拆分校验→按结果分多分支→各分支标记状态→Merge聚合所有结果→输出统一数组用于后续处理。
三、实操:批量读取Excel数据并逐个校验格式
结合Loop与Merge节点,我们搭建企业高频场景:读取Excel中的客户数据(含姓名、手机号、邮箱),逐个校验手机号(11位数字)和邮箱(含@)格式,最后聚合所有数据及校验结果,导出为新Excel。
3.1 准备工作
-
1个n8n环境;
-
待处理Excel文件:包含3列"姓名""手机号""邮箱",提前保存至本地(如"客户数据.xlsx");
-
安装"Excel Reader"和"Excel Writer"节点(n8n默认已集成,若缺失在"节点库"中搜索安装)。
3.2 分步搭建:6个节点完成全流程
步骤1:添加"Excel Reader"节点(读取批量数据)
-
新建工作流→添加"Excel Reader"节点;
-
配置参数:
- 选择"File Source"为"Upload File"→点击"Upload"上传本地Excel文件;
- "Sheet Name":输入Excel工作表名称(如"Sheet1");
- 勾选"First Row is Header"(第一行为表头);
- 点击「Execute Node」测试,确认Output输出数组格式数据,每条包含姓名、手机号、邮箱字段。
步骤2:添加"Loop"节点(拆分单条数据)
-
添加"Loop"节点→选择"Mode"为"For Each Item";
-
配置"Array to Loop Through"为
{``{ $node["Excel Reader"].json["data"] }}(引用Excel读取的数组); -
测试节点,确认"Current Item"显示单条数据(如第一条客户信息)。
步骤3:添加"Regex"节点(校验手机号格式)
-
点击Loop节点右侧「+」→搜索"Regex"→添加"Regex"节点(正则表达式校验);
-
配置参数:
- "Field to Match":选择"String"→值为
{``{ $json["手机号"] }}(当前循环项的手机号); - "Regex Pattern":输入
^1[3-9]\d{9}$(11位手机号正则表达式); - 勾选"Case Insensitive"(不区分大小写,此处无影响但建议勾选);
- 测试节点,若手机号正确则"Match"为true,否则为false。
步骤4:添加"IF"节点(多条件判断分支)
-
添加"IF"节点→配置"Condition"为"Multiple Conditions"(多条件判断);
-
设置两个条件(逻辑关系为"AND"):
-
手机号Regex节点的"Match"为true(
{``{ $node["Regex"].json["match"] }}== true); -
邮箱包含"@"(
{``{ $json["邮箱"] }}contains "@"); -
此IF节点会生成3个分支:True(双格式正确)、False(至少一项错误)、以及False分支下再嵌套IF节点判断"手机号错误"还是"邮箱错误"。
步骤5:各分支添加"Set"节点(标记处理状态)
-
True分支(双格式正确) :
添加"Set"节点→保留姓名、手机号、邮箱字段,新增"处理状态"字段,值为"校验通过"。
-
False分支1(手机号错误) :
嵌套IF节点判断"Regex节点Match为false"→添加"Set"节点,"处理状态"值为"手机号格式错误"。
-
False分支2(邮箱错误) :
嵌套IF节点判断"邮箱不包含@"→添加"Set"节点,"处理状态"值为"邮箱格式错误"。
步骤6:添加"Merge+Excel Writer"节点(聚合导出)
-
Merge节点聚合 :
添加"Merge"节点→Mode为"Combine"→Add Input依次添加三个分支的"Set"节点→测试确认聚合为包含所有数据及状态的数组。
-
Excel Writer节点导出 :
添加"Excel Writer"节点→选择"File Destination"为"Download"(下载文件);
配置"Data to Write"为
{``{ $node["Merge"].json["data"] }}(聚合后的数据);点击执行,n8n会自动生成新Excel文件供下载,包含每条数据的校验状态。
3.3 实操避坑指南
1. Excel读取无数据?→ 检查"Sheet Name"是否与Excel一致(区分大小写),确认第一行是表头且勾选"First Row is Header";
2. 正则校验全部失败?→ 检查Regex节点的"Field to Match"是否引用当前循环项({{ $json["手机号"] }}),而非上游数组;
3. Merge聚合字段缺失?→ 确保三个分支的"Set"节点保留了相同的基础字段(姓名、手机号、邮箱);
4. Excel导出乱码?→ 在Excel Writer节点的"Advanced Options"中设置"Encoding"为"UTF-8"。
四、核心总结与下节预告
4.1 核心知识点
-
Loop节点:For Each Item模式处理固定数组(批量场景首选),数据引用用{{ $json["字段名"] }};
-
Merge节点:Combine模式聚合多分支数据,聚合前需统一各分支字段结构;
-
批量处理核心流程:读取数组→Loop拆分→单条处理→多分支标记→Merge聚合→结果导出。
4.2 下节预告
Day2课时3我们将聚焦"错误处理与工作流优化",学习Catch Error节点捕获异常、工作流精简技巧,为批量处理工作流添加"异常告警"功能,让自动化不仅能跑,还能"稳定跑、出问题早知道"。
如果在Loop循环、Merge聚合或Excel节点配置中遇到问题,欢迎在评论区留下你的操作步骤和报错信息,我会帮你定位解决~
这篇博文聚焦批量处理的核心技术点,实操步骤附带具体配置参数和正则表达式,便于直接复用。你若需要调整校验规则(如增加身份证号校验)或更换文件存储方式(如读取云Excel),可以随时告诉我进行优化。