它解决什么问题
读单个 Excel 文件、读其中某个工作表、或者一次读进整个文件夹里格式相同的一批文件并自动摞成一张表。绝大多数分析流程的第一个节点就是它。
批量读不要用循环。配置里把来源从「文件」改成「文件夹」,它自己会遍历并纵向拼接,还能附加一列记录每行来自哪个文件。用 Loop 手写一遍不但慢,还要自己处理行 ID 重复。
基本信息
| 英文原名 | Excel Reader |
|---|---|
| 中文名称 | Excel 读取器(iModel 中文界面) |
| 节点库位置 | IO → Read → Excel Reader |
| 输入端口 | 无必需端口。可选一个文件系统连接端口,用于读远程或受控目录 |
| 输出端口 | 1 个数据表 |
| 支持格式 | xlsx、xlsm、xls |
配置项逐条
-
Source / Read from来源
选单个文件还是整个文件夹。选文件夹时还能设过滤条件,比如只读
*.xlsx、只读文件名含「月报」的。同一个文件夹里混着别的文件时必须设,否则会去读不该读的。 -
Sheet selection工作表选择
三种选法:第一个工作表、按名称、按位置序号。批量读多个文件时优先按序号或「第一个」 – 各文件的工作表名往往不完全一致,按名称选会在某个文件上直接失败。
-
Table contains column names in row表头所在行
表头不在第一行时填实际行号。国内报表上面常有一到三行大标题和制表日期,不设这一项,那些标题会变成列名,整张表就废了。
-
Sheet area读取区域
限定只读某个行列范围。表格右边挂着备注、下面挂着合计行和签字栏时用得上,比读进来再删干净。
-
Formula evaluation公式处理方式
KNIME 不会重新计算 Excel 公式,它读的是文件里存着的上次计算结果。这一项决定读不到结果时怎么办:置空、报错、或者退而读公式文本本身。默认置空最安全。
-
Limit rows for type detection类型推断扫描行数
它靠扫描前若干行来猜每列是数字还是文本。脏值出现在扫描范围之外,执行时才会炸。数据量大且质量不稳时,把这个值调大,或者干脆手工指定列类型。
三个常见坑
- 公式列读进来是空的或者是旧值。文件如果是程序生成、从没被 Excel 打开保存过,公式格里就没有缓存结果,KNIME 读到的是空。修法:让出数据的人保存一次,或者请上游直接给数值不给公式。这一条在自动化报表场景里非常常见。
- 合并单元格只有左上角那格有值。Excel 里视觉上跨了五行的「信息部」,读进来只有第一行是「信息部」,后面四行全空。这是文件本来的存法,不是节点的问题。读进来后接 Missing Value 节点,用「取上一个非空值」向下填充。
- 日期变成了五位数字。Excel 内部把日期存成序号,单元格格式没设对时读出来就是
45292这种。用日期转换类节点按 Excel 序号还原,别手工算。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 文件是 csv 或 txt | CSV Reader,编码要单独设,中文文件多为 GBK |
| 一个文件里多个工作表都要读,且结构不同 | 放多个 Excel Reader 各读各的,别指望一个节点解决 |
| 要把结果写回 Excel | Excel Writer,多张表可写进同一个工作簿的不同工作表 |
| 数据在数据库里 | DB Connector 加 DB Query Reader |

