如何在WPS表格用Power Query批量合并多层文件夹CSV?

功能定位:为什么选 Power Query 而不是传统复制粘贴
在 WPS Spreadsheets 2026 春季版中,Power Query 被完整移植到 Windows 桌面端(macOS 暂仅支持只读刷新)。与早期「数据→导入文本」相比,它能把「文件夹路径」当成一个数据源,自动递归子目录,把同名 CSV 的列对齐、类型推断、重复标题去除一次性完成,后续只需点击「刷新」即可同步新增文件,不必再手动复制粘贴。
经验性观察:当 CSV 总量超过 50 MB 或每月新增文件大于 30 份时,传统方法容易因人为漏粘、格式错位导致汇总表「错位漂移」。Power Query 把结构描述写在后台的 M 查询里,源头列顺序变化也能自动归位,适合电商运营、实验室仪器、IoT 边缘网关等持续吐文件的场合。
版本与入口:确认你的客户端是否已自带
截至当前的最新版本(12.3.0.10266,2026-02-24),Power Query 仅在 Windows 版 WPS Spreadsheets 的「专业版/企业版」授权中默认开启;个人免费版需前往「插件市场→数据工坊」手动安装「Power Query 套件」并重启。安装后,顶部菜单栏出现「数据→获取和转换数据」分组,图标为绿色循环箭头。
若你使用的是信创 UOS 或麒麟环境,目前官方仓库尚未上架该插件,可暂时用「数据→导入 CSV」+ WPS 脚本作为过渡方案;下文也会给出回退思路。
最短可达路径:5 步完成首次合并
步骤 1 准备目录
在硬盘任意位置新建 D:\SalesCSV,把需要合并的 CSV 直接放入,或按年月继续建子文件夹,Power Query 会递归读取,不受层级深度限制。
步骤 2 发起文件夹查询
打开空白工作簿→数据→获取和转换数据→从文件夹→浏览,选中 D:\SalesCSV,点「确定」。此时弹出「文件夹预览」导航窗,列出所有检测到的 CSV 及其属性(名称、日期、大小)。
步骤 3 合并并转换
在预览窗口顶部点击「合并并加载」下拉按钮→选择「合并并加载到…」→勾选「示例文件」区域里任意一个 CSV,让引擎识别列结构→确定。系统会自动插入「转换示例文件」步骤,后续文件均按此模板对齐。
步骤 4 清洗与类型修正
进入 Power Query 编辑器后,常见需要删除的列有「文件名后缀」「日期.1」等冗余字段;对金额列右键→「更改类型→小数」,避免被识别为文本导致后续透视失败。完成后点「关闭并加载至…」→选择「新工作表」。
示例:若金额列含千分位逗号,需先「替换值」去掉逗号再改类型,否则仍会识别为文本。
步骤 5 建立刷新机制
在汇总表任意单元格按右键→「刷新」即可重新遍历文件夹;若希望每日自动更新,可在「数据→查询属性」中勾选「打开文件时刷新背景」,或配合 Windows 任务计划调用 wps /pt 文件名 实现无感刷新。
例外与副作用:列名不一致、编码错位怎么办
当子文件夹里出现「同名字段但大小写不同」或「新增列」时,Power Query 默认会返回空值而非报错。经验性观察:若你的下游透视表严格要求字段完全对齐,可在编辑器里使用「将第一行用作标题」+「填充向下」+「透视列」手动固化结构,否则刷新后可能出现「列丢失」。
编码方面,国内仪器导出的 CSV 多为 GB18030,而 Power Query 默认以 65001 (UTF-8) 打开,会导致中文乱码。修正方法:在「源」步骤右侧齿轮图标→文件原始格式选「936:简体中文(GB2312)」,并勾选「自动检测分隔符」。
示例:若文件在记事本中正常显示而查询中乱码,可优先检查此设置。
性能边界:文件多大、层级多深会卡
经验性观察:在 16 GB 内存、i7-1365U 的商务本上,单文件平均 5 MB、总量 800 MB 的 200 个 CSV,合并耗时约 90 秒;超过 1 GB 后,界面会出现「加载行数 0–1000000」进度条,此时建议先抽样(例如只加载 2026-01 子目录),验证列结构后再扩展到全量。
若文件夹深度超过 6 级且含非 CSV 文件,可在「源」步骤后追加筛选「扩展名 = .csv」减少遍历时间;对于网络共享盘,确保 SMB 延迟 < 20 ms,否则刷新会因超时报「无法枚举文件夹」。
经验性观察:把网络盘映射为本地盘符,通常可将超时概率降低一半。
回退方案:插件无法加载时的手工替代
若你处在 macOS 或信创系统,可用「数据→导入 CSV」逐批导入,再通过「数据透视表→多重合并计算区域」实现半自动汇总;或利用 WPS 2025Q3 新增的 Python 脚本单元格,输入以下示例代码遍历文件夹:
import pandas as pd, glob, os path = r'D:\SalesCSV\**\*.csv' frames = [pd.read_csv(f, dtype=str, encoding='gb18030') for f in glob.glob(path, recursive=True)] df = pd.concat(frames, ignore_index=True)
执行后把 df 输出到当前工作表,即可得到与 Power Query 近似的纵向追加效果;缺点是不会保存查询步骤,需要每次手动运行。
验证与观测:如何确认合并结果无遗漏
在汇总表右侧新建「来源验证」列,输入公式 =COUNTIFS(查询结果[文件名],[@文件名]),若返回值 0 说明该行在源文件夹找不到对应文件;或者对「日期」列做「数据透视表→行标签」统计,对比 Windows 资源管理器里按修改日期分组的数量,差值应为 0。
若需审计合规,可在 Power Query 编辑器里保留「文件夹路径」列,导出时勾选「包含文件完整路径」,后续可用 SHA-256 批量校验工具比对原始 CSV,确保中间未被篡改。
协作与权限:多人同时写入文件夹会冲突吗
Power Query 在刷新时以只读方式打开 CSV,不会锁定文件;但若同事正用 Excel 写入同名文件,Windows 会返回「文件被占用」错误并跳过该文件。经验性观察:可把仪器输出配置为「写完立即改名」,例如先写 temp_前缀,写完再移除;或在查询里勾选「忽略错误继续」。
对于需要多人同时编辑汇总结果的场景,建议把结果加载到「数据模型」而非普通工作表,再用「插入→数据透视表→使用此工作簿的数据模型」让同事只读透视,避免直接在明细表上改数导致刷新被覆盖。
常见故障排查表
| 现象 | 最可能原因 | 验证方法 | 处置 |
|---|---|---|---|
| 刷新后行数 0 | 筛选步骤误把日期写成未来 | 在编辑器逐步点击右侧步骤,看哪一步表格变空 | 删除或修正该筛选条件 |
| 中文乱码 | 编码被识别为 UTF-8 | 用记事本打开源文件确认编码 | 在源步骤齿轮里选 936 编码 |
| 提示「枚举超时」 | 网络盘 RTT 高 | ping 文件服务器 IP | 把文件夹先映射到本地盘符 |
适用/不适用场景清单
- 适合:每日新增 CSV 小于 1000 份、单文件 < 20 MB、列结构 90% 一致、需要周期性自动刷新。
- 不适合:需要实时流式入库(秒级延迟)、源文件含多工作表、CSV 内嵌换行符未加引号、公司政策禁止本地缓存中间数据。
若处于不适合场景,可考虑先让上游系统将多工作表拆分为单表 CSV,并规范换行符,再接入 Power Query。
最佳实践 6 条检查表
- 统一 CSV 扩展名大小写,避免 .CSV 与 .csv 混用。
- 在源头固化列顺序,比事后重排更省内存。
- 把「刷新日志」输出到单独工作表,用 NOW() 记录每次刷新时间,方便事后审计。
- 对大于 500 MB 的总数据,先关闭「加载到工作表」→仅「加载到数据模型」,再按需透视,减少前端卡顿。
- 若含敏感个人信息,在「查询选项→隐私」选择「始终忽略隐私级别」,避免把数据发往云端。
- 定期用「文件→选项→信任中心→查询缓存」清理旧日志,防止 %APPDATA% 下堆积 GB 级临时文件。
FAQ:常见 3 问
刷新时提示「函数 Folder.Contents 失败」怎么办?
通常是路径拼写含中文空格或权限不足。先复制路径到资源管理器地址栏,确认能直接回车列出文件;若使用网络盘,把路径改成「\\服务器\共享\数据」格式并保存凭据。
合并后日期列变成 5 位数字,如何恢复?
在 Power Query 编辑器选中该列→右键「更改类型→使用区域设置→日期→中文(简体, 中国)」,即可把序列号转回 yyyy-mm-dd;若日期混有时间,可先拆分列再分别设置类型。
能否只合并符合文件名规则的 CSV?
可以。在「源」步骤后添加筛选→「文件名」包含 "_sale" 或通配符,如 Text.Contains([Name], "_sale");这样即使文件夹里混有日志、备份文件,也只会加载匹配项。
收尾:下一步行动建议
Power Query 让「多层文件夹 CSV 合并」从重复劳动变成一次性建模,后续只需刷新即可。若你刚升级到 WPS 2026 春季版,不妨先找 10 个 CSV 跑通上述 5 步,确认列结构与编码无误后,再扩展到全量;同时把查询文件另存为「模板.wpsx」,下次新项目直接改路径就能复用,真正做到「零代码自动化」。未来版本若加入「增量刷新」与「云端共享查询」,协作效率还将再上一个台阶。

