报错原文
Tables have different specs
Input table’s structure differs from reference (first) table
报错出在 Loop End 上,但原因几乎都在循环体里面。
一句话原因
Loop End 把每一轮的结果纵向摞起来,前提是每轮的表结构一致 – 列名相同、列类型相同。第一轮跑出来什么样,后面每轮都得是那样。某一轮多一列、少一列、或者某列类型变了,就对不上。
Loop Start逐个文件
→
循环体第 1 轮:8 列
→第 3 轮变成 7 列
Loop End对不上,中止
红的是 Loop End,但要查的是循环体里那一轮为什么不一样。
四个常见来源
| 来源 | 说明 |
|---|---|
| 某个源文件少一列或多一列 | 批量处理一批 Excel,其中一个月的模板改过。最常见 |
| 循环体里有 GroupBy | 输出列随聚合方法命名,某轮数据不同可能产出不同的列 |
| 循环体里有 Pivoting | 列数由数据取值决定。这一轮有三个部门、下一轮有四个,列数就不同 |
| 某列类型在不同轮不一样 | 一轮里这列全是数字被推断成数值,另一轮混了「N/A」变成文本 |
怎么定位是哪一轮
- 先让它跑到出错为止。Loop End 报错时,前面已经成功的轮次结果通常还在,能看出跑到第几轮断的。
- 在循环体末尾临时接一个写出节点。把每轮结果写成带轮次编号的文件,跑一遍看哪个文件结构不同。笨但有效。
- 直接查源头。如果是批量读文件,把各文件的表头拉出来对一遍 – 通常一眼就看出哪个不一样。
三种修法,从治本到应急
-
治本:在循环体末尾统一表结构
循环体最后接一个 Column Filter,按名单固定保留哪几列,并且把「新列如何处理」设成以包含为准。这样不管这一轮的数据长什么样,出来的都是同一套列。列类型不稳的话再加一步类型转换。
这是最可靠的做法 – 它让循环体有了一个稳定的输出契约。
-
改结构:把会变列的节点挪出循环
Pivoting 和 GroupBy 放在循环体里天然不稳。改成先在循环里只做清洗和收集,等全部数据摞成一张表之后再统一汇总 – 多数情况下这样反而更快也更简单。
-
应急:让 Loop End 容忍差异
Loop End 的配置里有允许各轮表结构不同的选项。打开之后它会取并集,缺的列填缺失值。能跑通,但要知道代价 – 某一轮少了一列这件事被静默处理掉了,你不会知道有一批数据缺了字段。做核对类工作时慎用。
顺带一提:很多循环本来就不必写
如果你的循环只是「逐个读文件夹里的 Excel 再摞起来」,那不需要循环。Excel Reader 和 CSV Reader 的文件夹模式自己就会遍历并拼接,还自带来源文件列。去掉循环,这类报错也就没了。

