怎么在WPS表格中一键导入指定目录所有文件名到工作表?

功能定位:为什么“一键导入文件名”值得单独做
在合规与数据留存的视角下,把“某目录下所有文件名”批量写进表格,不只是为了省事,而是为了留下可审计、可回溯、可对比的原始记录。WPS表格在 12.9.1 之后,把 Power Query(桌面版)与 VBA(Windows 版)两条通路都开放给个人免费用户,既避开了手工复制粘贴的差错,也避免了第三方插件的授权风险。
核心关键词“一键导入指定目录所有文件名到工作表”在 WPS 生态里,对应两条官方路径:①数据→获取数据→自文件夹(Power Query 入口);②开发工具→VB 编辑器→模块级宏(VBA 入口)。两者生成的结果都是可刷新、可参数化的“文件名清单表”,天然支持后续比对、哈希追加、时间戳留存。
决策树:先选路径,再决定要不要自动化
提示
如果你只是临时一次性需求,且文件数<200,直接 Power Query 点两下即可;若文件数过万、需要每日增量刷新,或要把“文件名+MD5”一起入库,再走 VBA 模板更稳。
| 维度 | Power Query | VBA |
|---|---|---|
| 学习成本 | 低,全程点击 | 需会改三行代码 |
| 刷新方式 | 右键→刷新 | 按钮或定时触发 |
| 跨平台 | Win / macOS 均可用 | 仅 Windows |
| 审计日志 | 自动生成连接字符串 | 需手写日志函数 |
Power Query 路径:五步拿到可刷新文件名表
步骤 1:定位入口
桌面版 WPS 表格顶部菜单数据→获取数据→自文件夹(macOS 版路径相同,图标为绿色文件夹)。若你是首次使用,会弹出“数据连接器”许可框,勾选“本人同意”即可,该许可仅本地留存,不上传文件内容。
步骤 2:选择目录
在弹出的“文件夹”对话框里,复制粘贴目标路径,例如D:\Contracts\2026Q1,点“确定”。此时 Power Query 会扫描第一层文件,不会递归子目录,如需递归,后文会给出开关。
步骤 3:过滤与排序
导航器左侧勾选“合并并加载到…”,右侧预览区可立即看到 Name、Extension、Date modified 等列。建议先取消“Date created”等无关字段,仅保留 Name、Folder Path、Date modified,减少后续刷新耗时。
步骤 4:加载到工作表
选择“加载到→表→新工作表”,WPS 会自动新建 Sheet 命名为“文件夹查询”。此时若文件夹后续增删文件,只需在该表右键刷新即可同步,无需重复操作。
步骤 5:启用递归(可选)
在查询编辑器地址栏把路径最后的“*”改为“**”,即D:\Contracts\2026Q1\**,再点“刷新”,Power Query 会递归子目录。经验性观察:文件数过万时刷新耗时可能从 3 秒增至数十秒,视磁盘性能而定。
VBA 路径:三分钟拿到可审计清单
警告
宏需保存为 *.xlsm 格式,否则下次打开代码会丢失;若公司组策略禁用宏,请优先用 Power Query。
步骤 1:打开开发工具
Windows 版 WPS 表格,文件→选项→自定义功能区→勾选“开发工具”,确定后顶部出现“开发工具”页签。
步骤 2:插入模块
开发工具→VB 编辑器→右键“VBAProject(当前工作簿)”→插入模块,贴入以下示例代码(已剔除递归,如需递归可把Dir改为Dir$(path & "\*.*", vbDirectory)并循环):
Sub ListFileName()
Dim path As String, fn As String, r As Long
path = InputBox("请输入文件夹路径", "路径", "D:\Contracts\2026Q1")
If Right(path, 1) <> "\" Then path = path & "\"
fn = Dir(path & "*.*")
r = 1
Do While fn <> ""
Cells(r, 1) = fn
Cells(r, 2) = FileDateTime(path & fn)
r = r + 1
fn = Dir()
Loop
MsgBox "已写入 " & r - 1 & " 条记录", vbInformation
End Sub
步骤 3:绑定按钮
回到表格界面,插入→形状→圆角矩形,输入文字“一键导入文件名”,右键“指定宏”选ListFileName。以后点击即可重新扫描目录,旧数据会被覆盖,便于每日更新。
例外与取舍:什么时候不该用
- 路径含隐私:若目录在加密盘(BitLocker/国密盘),Power Query 连接字符串会明文写出盘符,审计日志可能泄露。解决:改用 VBA,在代码里把路径拆成输入框,不保存到查询。
- 文件数>10 万:Power Query 会一次性载入内存,32 位 WPS 可能提示“内存不足”。经验性观察:在 64 位系统 + 64 位 WPS 下,20 万文件仍可完成,但耗时约 3 分钟;若超过该量级,建议先用命令行
dir /b > list.txt再导入文本。 - 需要哈希值:Power Query 原生不提供 MD5,需要调用第三方 M 函数库,部署复杂。此时 VBA 可直接引用
System.Security.Cryptography,一次循环同时输出文件名与哈希,方便后续合规比对。
验证与观测方法:确保结果可信
① 在目标目录运行命令提示符dir /b | find /c /v "",得到文件总数;② 与 WPS 表格返回行数比对,差值应为 0。若差值>0,检查是否过滤了隐藏文件或快捷方式。③ 打开“查询属性→刷新日志”,确认每次刷新时间戳与操作人账号,满足审计要求。
与第三方机器人协同:最小权限原则
若你们团队使用金山文档机器人或自建 Webhook 做“每日文件变动通知”,可把上述 Power Query 表发布为数据范围→右键→创建链接表,机器人仅需“读取链接表”权限,无需访问原始目录,降低泄露风险。
故障排查:常见三条报错
| 报错原文 | 根因 | 处置 |
|---|---|---|
| 无法找到文件夹 | 路径含中文空格且未加引号 | Power Query 用“浏览”按钮重选;VBA 给 InputBox 结果加双引号 |
| 刷新后 0 行 | 仅勾选“子文件夹”但未勾选“合并” | 导航器左侧重新勾选“合并并加载” |
| 宏被阻止 | 组策略禁用 VBA | 改用 Power Query;或联系 IT 把当前文件加入信任中心 |
适用/不适用场景清单
- 适用:财务月结前批量核对回单、法务归档扫描件、运维每日脚本日志、高校实验数据按天抽检。
- 不适用:实时高频监控(秒级变动)、需同时抓取文件内容、目录含国家秘密且未做脱敏。
最佳实践 5 条(检查表)
- 统一命名:把 Power Query 表命名为
FileList_YYYYMMDD,方便后续追加。 - 版本隔离:每季度复制一份 *.xlsx 作为“快照”,防止刷新覆盖历史。
- 哈希留痕:如需审计,在 VBA 里加 MD5 列,并把结果另存为 CSV 只读。
- 权限最小:机器人或脚本仅需“读取”链接表,禁止给“目录遍历”特权。
- 回退方案:保留一份
dir /b > list.txt的批处理,断网环境也能复现。
FAQ(结构化数据,便于搜索引擎抓取)
Mac 版 WPS 能用 VBA 吗?
截至当前最新版本,macOS 版仅支持 Power Query 与 JS 宏,不支持传统 VBA。如需递归目录,请用 Power Query 的“**”通配符方案。
刷新后时间戳列全变成同一天?
Power Query 默认使用“查询刷新时间”而非文件系统时间。请在查询编辑器里把 Date modified 列的“数据类型”设成DateTimeZone,并关闭“使用区域刷新”选项。
文件清单能否直接生成 PDF 报告?
可以。在 WPS 表格里选中清单→文件→导出→创建 PDF,勾选“符合 PDF/A 存档标准”,即可生成带目录书签的合规 PDF,方便长期留存。
收尾:下一步行动建议
如果你今天就要交“目录文件清单”给审计,直接按本文 Power Query 五步走,十分钟内可得到带时间戳的可刷新表;若后续要每日自动比对,把 VBA 模板保存为 *.xlsm,再配 Windows 任务计划即可。记得把“查询属性→刷新日志”打开,让每一次点击都有记录,真正做到一键导入、全程可审、随时回退。
📺 相关视频教程
原来Excel跨表合并多个表格这么简单😭 #excel #办公技巧 #职场干货 #office办公技巧


