夜雨聆风学习资料网

ARTICLE · 1089840

Excel Power Query批量合并100个CSV测试数据

Excel Power Query批量合并100个CSV测试数据
产线每天吐一堆测试 CSV:TEST_001.csv、TEST_002.csv……月底一数,100 个。老板要一张"全量测试汇总表"做 SPC 和良率分析。你打开第一个文件,复制;打开第二个,粘贴到下面;第三个……复制到手抽筋,还容易漏行、串列。

这活儿 Power Query 三分钟能搞定,而且以后每天新增 CSV,点一下"刷新"就自动并进总表。本文用半导体测试数据(批次/机台/产品/测试项/实测值/判定)带你从文件夹直接合并 100 个文件,零手写公式。

【解决方案概览】

核心思路:不一个个打开,而是把"装 CSV 的文件夹"当作数据源,让 Power Query 逐个读、纵向堆叠成一张表。

数据源:同一个文件夹里的 100 个结构一致的 CSV。
关键能力:Folder.Files 读取整个文件夹 → Csv.Document 逐个解析 → Table.Combine(或展开)堆叠 → 加一列「源文件」溯源。
收益:一次建好查询,新增文件只需刷新;自带「源文件」列,哪行数据来自哪个 CSV 一目了然,做透视/溯源都方便。

配套 半导体测试CSV合并PowerQuery模板.zip 里含 100 个真实结构示例 CSV + 合并后预览 + 可复制的 M 源码,照着练一遍就会。

【分步实操】

第 1 步:把 100 个 CSV 放进同一个文件夹

保证每个文件列数、列名完全一致,例如:

批次,机台,产品,测试项,实测值,单位,判定TEST_001,BM-07,PN-2048,Vt,1.18,V,PASSTEST_001,BM-07,PN-2048,Idq,2.05,uA,PASS...

列不一致是合并失败的第一大坑(见避坑)。

第 2 步:从文件夹导入

Excel 里点「数据 → 获取数据 → 从文件 → 从文件夹」,选中你放 CSV 的文件夹,确定,会看到文件列表。点「转换数据」进入 Power Query 编辑器。

第 3 步:替换成合并查询(关键)

在编辑器里点「高级编辑器」,把整段代码替换为下面的 M 查询(只改第一行路径):

let    // 1) 指向存放 100 个 CSV 的文件夹    源 = Folder.Files("C:\测试数据\CSV"),    // 2) 只保留 .csv,去掉系统隐藏文件    CSV文件 = Table.SelectRows(源, each Text.EndsWith([Name], ".csv")),    // 3) 每个文件读成表(UTF-8,逗号分隔)    读成表 = Table.AddColumn(CSV文件, "数据",        each Csv.Document([Content], [Delimiter = ",", Encoding = 65001, Columns = 7])),    // 4) 展开所有文件的数据,并提升首行为标题    展开 = Table.ExpandTableColumn(读成表, "数据",        {"Column1","Column2","Column3","Column4","Column5","Column6","Column7"}),    提升标题 = Table.PromoteHeaders(展开, [PromoteAllScalars = true]),    // 5) 加一列「源文件」,记录每行来自哪个 CSV(便于溯源)    加源文件 = Table.AddColumn(提升标题, "源文件",        each CSV文件[Name]{Table.PositionOf(CSV文件, [Content])}, type text),    // 6) 把文本数字转成数值,方便后续透视/筛选    改类型 = Table.TransformColumnTypes(加源文件,        {{"实测值", type number}})in    改类型

点完成,100 个文件瞬间变成一张 600 行的大表(100×6),每行都带「源文件」列。

第 4 步:上载并刷新

「关闭并上载」→ 总表出现在新工作表。下次文件夹里多了 TEST_101.csv,右键总表「刷新」,它自动并入,不用再手动复制。

【关键参数说明】

路径:Folder.Files("你的文件夹") 是整件事的开关,路径别写错、别含中文空格导致的转义问题(Windows 用双反斜杠 \\)。
编码 Encoding = 65001:65001 = UTF-8,适配绝大多数导出;若你的 CSV 是 GBK(老设备常见),改成 936,否则中文乱码。
Columns = 7:必须和 CSV 实际列数一致;列数不符会导致 ExpandTableColumn 丢列或报错。
「源文件」列:用 CSV文件[Name]{...} 把文件名带回每一行。没有这列,合并后你根本分不清某行数据是谁的。
实测值转数值:CSV 读进来默认是文本,type number 转换后才能算平均值、做透视;不转的话排序会按字符串("10"<"9")。

【常见问题和避坑提醒】

1.列对不齐 / 合并后丢列:100 个文件必须列数、列名完全一致。导出时统一模板,别让某个文件多一列"备注"。
2.中文乱码:Csv.Document 的 Encoding 用 65001;GBK 源改 936。先拿一个文件试读确认不乱码再加全量。
3.多了无关文件:Folder.Files 会把子文件夹、Thumbs.db 一起读进来,务必用 Text.EndsWith([Name],".csv") 先过滤。
4.实测值是文本:忘了 type number,后面透视全错。合并后先检查「实测值」列是不是右对齐(数值右对齐、文本左对齐)。
5.源文件列取不到值:示例用 Table.PositionOf 定位,部分旧版本不支持;更稳的做法是用「从文件夹」向导的「组合」功能,让它自动生成示例文件推导,源文件列会自动带出。
6.刷新变慢:100 个文件还好;上千个 CSV 建议先在同文件夹只留需要的,或定期归档历史,避免每次刷新重读全部。

【总结】

合并 100 个 CSV 不是体力活,是配置活。把"文件夹"当数据源,用 Folder.Files + Csv.Document + 展开 + 加源文件列 四步建成查询,之后就是"刷新"两个字。模板里的 100 个示例 CSV 已按真实产线结构生成并校验(600 行、源文件列唯一完整),换成你自己的文件立刻能跑,再做透视就是周报、良率、SPC 一条龙。

【领取资料】

回复【Excel合并CSV模板】,领取《半导体测试CSV合并PowerQuery模板.zip》:

  • sample_csvs/:100 个示例 CSV(TEST_001~TEST_100,结构同正文,可直接练手)
  • PowerQuery合并结果预览.xlsx:合并后 600 行大表(含源文件列、PASS/FAIL 着色)
  • PowerQuery源码.txt:可整段复制的 M 查询代码
  • 使用说明.md:三步上手 + 改造指南 + 避坑

相关学习资料