Excel 多表合并:用一条工作流读完整个目录,并处理国内报表的五个坑
Excel 多表合并,指把结构相同的多个 Excel 文件或工作表纵向追加成一张表,是财务、审计和运营岗位每月的固定工作。本文讲怎么把它做成一条可以反复运行的工作流:新文件放进目录,执行一次即可;同时逐个处理国内报表里常见的五个坑,最后说明什么情况下用 Excel 自带的 Power Query 就够了。
| 关键事实 | 内容 |
|---|---|
| 合并方向 | 本文讲纵向追加(合并后行数变多);横向关联(列数变多)用 Joiner 节点,不在本文展开 |
| 列结构一致时 | Excel Reader 节点的文件夹模式,一个节点读入并追加整个目录,不需要循环 |
| 需要循环的情形 | 各文件表头行位置不同、要读取一个工作簿里的全部工作表、各文件需要分别处理 |
| 列不一致时 | 读取时可选并集或交集;同义列名需另行统一 |
| 追溯来源 | 勾选追加文件路径列,数据出错时可定位到具体文件 |
| Excel 行数上限 | xlsx 每个工作表 1,048,576 行,xls 每个工作表 65,536 行 |
| 运行环境 | Windows,以及 x86-64 版本的麒麟 V10/V11、统信 UOS。iModel 目前不支持 ARM 架构(鲲鹏、飞腾),相关版本仍在规划中。 |
| 内核基线 | iModel 基于 KNIME 开源内核二次开发,当前基线为 KNIME 5.2;文中节点均用英文原名 |
| 核实日期 | 2026 年 9 月 15 日 |
Excel 多表合并,先分清纵向还是横向
动手之前先想清楚方向,方向错了后面的步骤都要返工。这两种情况在中文里都叫「合并」,用的节点却完全不同。判断方法只有一句:合并之后行数变多是纵向,列数变多是横向。
| 你的情况 | 属于 | 用什么 |
|---|---|---|
| 十二个月度文件,列结构一样,要摞成一张 | 纵向追加 | Excel Reader 文件夹模式 |
| 各分公司报的表,格式一致,要汇总到一起 | 纵向追加 | Excel Reader 文件夹模式 |
| 一个工作簿里十二个工作表,结构相同 | 纵向追加 | 循环读取各工作表 |
| 已经读进来的两三张表,要接在一起 | 纵向追加 | Concatenate |
| 主表缺部门名称,要从对照表补上 | 横向关联 | Joiner |
横向关联在 数据分析教程第五讲 里有完整演示,本文只讲纵向追加;已经读进来的几张表直接接在一起,见 Concatenate 节点说明。
Excel 多表合并:一个节点读完整个目录
最省事的做法不是一个个选文件,而是让读取节点直接读整个文件夹。KNIME 内核较早的版本需要用循环逐个读取,现在的读取节点已经内置多文件读取,列结构一致时不需要循环。下个月把新文件放进同一个目录,流程本身不用改。
与合并有关的四项读取设置
| 设置项 | 怎么设 |
|---|---|
| 读取模式 | 选「文件夹中的文件」(Files in folder),指向目录,可按扩展名筛选 |
| 表头行 | 指定列名所在的行号,前面的说明行就不会被当成表头 |
| 多文件列组合 | 各文件列不完全一致时,选并集(Union)或交集(Intersection) |
| 来源文件列 | 在高级设置中勾选追加文件路径列 |
工作表选择、列改名与类型转换等其余设置,以及批量读取的逐步截图说明,已在知识库的 批量读取文件夹中的 Excel 与 Excel Reader 节点说明 里讲过,这里不重复。
固定目录加文件夹模式、每月替换文件重跑,这套做法在 教程第八讲 里有从头到尾的演示;读取节点的基础用法见 第三讲。
什么时候还需要循环
文件夹模式要求各文件按同样的设置读取。遇到下面三种情况,就要改用循环,逐个文件或逐个工作表处理:
- 各文件的表头行位置不同:有的表头在第 3 行,有的在第 5 行,无法用同一个行号读取。
- 要读一个工作簿里的全部工作表:先用 Read Excel Sheet Names 列出工作表名称,再循环读取。
- 每个文件需要不同的处理:比如各分公司的列名写法不同,要在追加之前分别改名。
| 节点 | 在循环里的作用 |
|---|---|
| List Files/Folders | 列出目录里的全部文件路径 |
| Table Row To Variable Loop Start | 把每一行路径变成一次循环 |
| Excel Reader | 读取路径改由流程变量控制,每轮读一个文件 |
| Loop End | 把每一轮的结果纵向摞起来 |
流程变量怎样把路径传给读取节点,见 流程变量概念词条。
国内报表的五个坑
上面的流程在规整的数据上跑得很顺,但实际收上来的表常常没那么规整,下面五种情况通常会碰到其中几种。
坑一:表头不在第一行
很多报表前面有两三行说明:单位名称、报表期间、编制人。直接读进来,字段名就成了「某某公司 2026 年 8 月费用明细表」。
各文件说明行数相同时,在 Excel Reader 里指定列名所在行即可。行数各不相同时,要么改用循环逐个设置,要么把说明行一并读进来之后,用 Row Filter 删掉。
坑二:合并单元格
部门列做了纵向合并,在 Excel 里看起来整整齐齐,读进来之后只有每组第一行有值,下面全是缺失值。这个坑最容易被忽略,因为在 Excel 里完全看不出问题。
用 Missing Value 节点,把该列的处理方式设为「用上一个值填充」(Previous Value)。这一步要在分组汇总之前做,否则汇总会漏掉一批数据。另外要注意,如果某个文件的第一行本身就是空的,填充时会误用上一个文件最后一行的值,填充后建议按来源文件列抽查每个文件的第一行。
坑三:明细里混着小计行
「小计」「合计」「本月累计」这类行夹在明细中间,直接汇总会被重复计算,金额成倍放大。
用 Row Filter 剔除包含这些关键词的行。稳妥的做法是先统计这类行有多少条、分布在哪里,确认规则不会误伤真实数据,有的部门名称里本身就带「合计」二字。
坑四:各家列名不一致
同一个字段,有的写「金额」,有的写「金额(元)」,还有的写「发生额」。文件夹模式选并集时,这三种写法会变成三列,每列只有一部分文件有值;用 Concatenate 接表时默认也是如此。
写法只有两三种时,读入后用 Column Merger 把同义的两列合成一列。写法很多时,建一张「原列名、标准列名」对照表,在循环里用 Insert Column Header 按对照表逐个文件改名,再追加。
坑五:数字被存成文本
金额列在 Excel 里无法求和,读进来是字符串类型。常见原因是原表带了千分位逗号、货币符号,或者系统导出时夹带了不可见字符。
纯数字的文本,可以直接在 Excel Reader 的转换标签里把类型改为数值。带逗号或符号的,先用 String Replacer 去掉,再用 String to Number 节点 转换。转换后要检查缺失值有没有增加:转不成数字的值会变成缺失值,那些正是需要人工确认的脏数据。
什么时候 Excel 自己就够了
不是所有情况都值得搭一条流程。Excel 自带的 Power Query 通过「从文件夹」获取数据,同样可以合并整个目录并一键刷新。判断标准不是能不能合并,而是这件事的频率、复杂度和交接方式。
| 情况 | 建议 |
|---|---|
| 只做一次,三五个文件,结构一致 | 手工复制粘贴即可,不必搭流程 |
| 每月都做,团队熟悉 Excel | Power Query 从文件夹合并,不必另装软件 |
| 合并后还要多步清洗、跨表关联、汇总 | 两者都能做;Power Query 在「应用的步骤」里逐步回看,工作流在画布上逐个节点查看中间结果,按团队习惯选 |
| 结果要交给别人复核或接手 | 两者都能交接:Power Query 的查询保存在工作簿里,对方有 Excel 即可打开;工作流需要对方安装同一软件,但步骤以节点图呈现,适合步骤较多的流程 |
| 合并后超过 1,048,576 行 | Power Query 需加载到数据模型而不是工作表;工作流处理过程不受工作表行数限制,但写回 Excel 时同样受限 |
工作表行数上限以微软官方的 Excel 规格与限制说明 为准。
合并之后做什么
把多个文件合成一张表只是开头,接下来通常还要补字段、按维度汇总、写回 Excel。站上的教程按这个顺序分讲:
- 关联补字段:从另一张表补上缺的列
- 分组汇总:相当于数据透视表
- 月度重跑:替换文件后一键重新运行
- 从 Excel 到 iModel:VLOOKUP、数据透视表、常用公式逐项对照成工作流
这篇文档对您有帮助吗?
相关文档

