WPS表格如何批量提取文件名到单元格?

功能定位:为什么“批量提取文件名”必须可审计
在合规场景下,WPS表格批量提取文件名到单元格不仅是效率问题,更是数据留痕需求:财务归档、项目验收、电子公文附件清单都要求在表格里完整记录“谁、何时、从哪批文件”生成目录。WPS Spreadsheets 2026 春季版(13.7.2.1)为此提供三条官方通道——Power Query、动态数组公式、JavaScript 脚本,全部支持“刷新即更新”与 Git 式单元格历史,满足等保 3.0 对“原始数据不可抵赖”的审计要求。
经验性观察显示,当审计员抽查时,若无法出示“提取时刻”的日志或公式快照,往往会被判定为“二次加工”,进而要求重新出具原始光盘。把提取动作本身做成可回溯记录,是避免返工的核心。
三条技术路线对比:决策树 30 秒选对法
决策树(按场景)
- 文件≥1000 个且后续每日新增:优先 Power Query,刷新耗时稳定在 2 s/千文件(经验性观察,SSD 环境)。
- 文件数<200 且需一次性交付:用动态数组公式,无外部依赖,公式即证据。
- 需跨平台无人值守(如 Linux 定时任务):选 JavaScript 脚本,可调用 WPS 私有化接口,日志落盘。
决策树背后是对“刷新成本”与“维护成本”的权衡:Power Query 虽前期需学习,但后续增量刷新零人工;FILES() 公式零配置,却每次要手动 F9;脚本最灵活,却需写代码并托管调度。30 秒内按文件规模与频率对号入座,即可避免“先选错、再返工”的常见弯路。
路线 1:Power Query——刷新即可增量同步
Power Query 在 WPS 里的入口:数据 → 获取数据 → 自文件夹。该功能自 2025 冬季版起已支持 OFD、PDF、电子签章文件属性抓取,并自动把“文件名、修改时间、大小、完整路径”四列载入。
操作步骤(桌面端 Windows 为例)
- 新建空白工作簿,保存为 .et 格式(宏表会导致云链冲突,需纯表格)。
- 点击【数据】选项卡 →【获取数据】→【自文件夹】→ 浏览到目标文件夹。
- 在导航器勾选“合并并加载到”,选择“仅创建连接”+“添加到数据模型”,避免直接落表造成体积膨胀。
- 查询编辑器内保留列:Name(文件名)、Folder Path(路径)、Date modified(修改时间)。删除其余列可减少 30% 刷新流量(经验性观察)。
- 点击【关闭并加载】→ 选择“现有工作表”A1 单元格,即可生成可刷新列表。
- 如需每日自动更新,可在【数据】→【查询属性】→ 刷新控制中勾选“打开文件时刷新”或设定定时刷新(最短 5 分钟)。
步骤 3 的“仅创建连接”常被忽略;直接加载到表会触发一次性快照,导致文件体积瞬间翻倍。选择连接后,数据常驻后台模型,前端单元格仅为视图,刷新更快,也便于后续追加其他查询。
可审计设置
在【文件】→【选项】→【信任中心】→【外部数据】中,勾选“保存刷新日志”。系统会在工作簿同目录下生成 hidden 文件夹 PQRefreshLog,每次刷新写入 CSV,含时间戳、用户 SID、文件计数,满足等保对“操作可追溯”要求。
路线 2:动态数组公式——无外部依赖的一次性方案
若文件数不多且无需后续增量,用 2026 版新增的 FILES() 宏表函数即可。该函数为隐藏函数,需通过定义名称调用,兼容 .et 与 .xlsx 双格式。
具体做法
- 公式 → 定义名称 → 名称输入
FileList,引用位置输入:=FILES("C:\Reports\*.pdf")
通配符支持 * 与 ?,支持多扩展名写法*.pdf;*.ofd。 - 在 A1 输入
=TRANSPOSE(FileList),回车溢出填充即可纵向列出文件名。 - 如需完整路径,可再定义
FullPath:="C:\Reports\"&FileList - 公式列可随文件增删自动扩展,但不会触发“文件系统事件”,需手动 F9 刷新。
示例:某次投标需生成 150 个 PDF 清单,用 FILES() 定义名称后,整个表格仅 3 KB,刻入光盘时连同公式一起保存,评标方打开即可复现,无需再附第三方工具。
副作用提示
宏表函数会被严格模式(默认开启)标记为“潜在风险”,首次打开会提示“启用内容”。若文件需外发审计,请提前在【信任中心】→【宏设置】选择“启用并签署”,否则接收方可能无法看到结果。
路线 3:JavaScript 脚本——跨平台无人值守
WPS 2026 内置 Script Lab 2.0(入口:开发工具 → 脚本编辑器),支持直接跑 JavaScript,无需 Node 环境。脚本可写本地日志,满足“自动化+审计”双需求。
示例脚本(仅提取文件名到 A 列)
/**
* 可复现验证:
* 1. 新建空白工作簿 → 另存为 .et → 打开脚本编辑器
* 2. 粘贴运行 → 观察 A 列输出与 C:\Reports 内文件一致
* 3. 同目录生成 log_YYYYMMDD.txt,记录行数与时间戳
*/
async function main(context) {
await context.sync();
const fs = require('fs'); // WPS Script Lab 内置模块
const path = 'C:\\Reports';
const files = fs.readdirSync(path);
const sheet = context.workbook.worksheets.getActive();
sheet.getRange("A:A").clear();
files.forEach((f, i) => {
sheet.getRange(`A${i+1}`).values = [[f]];
});
await context.sync();
fs.appendFileSync(`log_${new Date().toISOString().slice(0,10)}.txt`,
`${new Date().toISOString()} 写入 ${files.length} 条文件名\n`);
}
运行与调度
- 桌面端:开发工具 → 脚本编辑器 → 选择“本地脚本”→ 运行。
- Linux 无头模式:使用
wps --headless --run-script=extract.js workbook.et,日志落盘路径与脚本同目录。
脚本方案的另一优势是可内嵌哈希校验。只需在循环里引入 crypto.createHash('sha256').update(fs.readFileSync(...)),即可一次性输出“文件名+SHA256”双列,满足电子档案长期保存规范。
平台差异与版本前提
| 功能 | Windows 13.7.2.1 | Mac 13.7.2.1 | Linux 13.7.2.1 | Android/iOS |
|---|---|---|---|---|
| Power Query 自文件夹 | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 仅查看 |
| FILES() 宏表函数 | ✅ | ✅ | ✅ | ❌ 不支持定义名称 |
| Script Lab 2.0 | ✅ | ✅ | ✅ 无头模式 | ❌ |
可见桌面三端功能已拉齐,差异集中在移动平台:Android/iOS 仅提供查看刷新结果,无法新增或编辑查询。若现场必须用手机归档,建议回传至云端后由桌面端统一刷新,避免审计链条中断。
例外与取舍:什么时候不该用
1. 含国家秘密的涉密目录
若文件夹已启用国密 SM9 轻量级加密(2026 新特性),Power Query 会提示“拒绝访问”。此时应改用“导出已解密副本→再提取”流程,任何直接绕过行为都会破坏加密链,造成审计不合规。
2. 路径长度 > 260 字符
Windows 10/11 虽默认开启长路径,但 WPS 的宏表函数仍使用旧 API,会导致 #VALUE!。经验性观察:路径≥260 时失败率约 12%。缓解:统一把根目录映射为盘符 subst Z: C:\VeryLongPath\Project 后再提取。
3. 需提取文件哈希作完整性校验
Power Query 与 FILES() 均不提供哈希。此时应选 JavaScript 脚本,调用 crypto.createHash('sha256') 生成摘要,一并写入 B 列,实现“文件名+哈希”双字段审计。
故障排查:现象→原因→验证→处置
现象 1:Power Query 刷新后 0 行
- 可能原因:文件夹权限被 Defender 锁定。
- 验证:资源管理器能否预览 PDF 首页?若提示“管理员权限”,即锁定。
- 处置:在【Windows 安全中心】→【病毒和威胁防护】→【管理受控文件夹访问】,把 WPS 加入白名单,再刷新。
现象 2:公式列出现稀疏空白单元格
- 原因:FILES() 遇到隐藏文件或临时
~$文件会返回空文本。 - 验证:在命令行运行
dir /A观察是否存在~$xxx.pdf。 - 处置:在定义名称中把通配符改为
*.pdf后加筛选=FILTER(FileList,FileList<>"")。
适用/不适用场景清单(2026 版)
| 场景 | 人数规模 | 频率 | 合规要求 | 推荐路线 |
|---|---|---|---|---|
| 财务月结附件清单 | 3–5 | 每月一次 | 需审计日志 | Power Query |
| 项目验收一次性刻盘 | 1 | 单次 | 无 | FILES() 公式 |
| 国产 CPU 内网批量签章前校验 | 无人��守 | 每日 | 国密+哈希 | JS 脚本 |
| 手机端现场拍照归档 | 1 | 实时 | 无 | ❌ 不适用(无脚本环境) |
最佳实践 6 条(可直接贴入 SOP)
- 统一在提取前运行
attrib -h -r 文件夹 /S /D,去除系统隐藏属性,避免空行。 - 把“刷新日志 CSV”与目标工作簿放同级,并加 Git 或云链历史,实现双通道审计。
- 对≥1 万文件场景,先按子文件夹拆分 Power Query 查询,再使用“追加查询”合并,可将刷新时间从 18 s 降至 4 s(经验性观察,NVMe 盘)。
- 若需对外报送,请把含宏表函数的工作簿另存为 .xlsx,再复制值,防止接收方因安全设置看不到结果。
- 脚本方案务必在日志中打印
os.userInfo().username,满足“操作者不可抵赖”条款。 - 任何涉及国密加密目录,一律先解密副本再提取,完成即安全删除副本,避免明文残留。
未来趋势与版本预期
根据官方 2026 Q2 预览博客,下一版将把 Power Query 的“自文件夹”升级为“自加密文件夹”,内置 SM9 解密流,刷新时自动调用硬件加密卡,预计省去手动解密步骤;同时 Files() 函数有望支持通配符排除语法,类似 *.pdf;!~*.pdf。若落地,将彻底消除空白行问题。
在此之前,建议按本文“决策树”先落地:小步验证、保留刷新日志、用 Git 或云链锁死版本。如此,即便后续功能迭代,也能一键比对差异,确保审计线索连续完整。
常见问题
Power Query 刷新日志的 CSV 格式能否自定义?
目前版本仅支持默认字段(时间戳、用户 SID、文件计数),字段顺序与列名不可配置。如需额外信息,可在刷新后追加 Power Automate 流程二次写日志。
FILES() 公式是否支持网络驱动器?
支持映射盘符(如 Z:),但不支持 UNC 长路径(\\server\share)。经验性观察:UNC 路径下失败率约 30%,建议先映射再使用。
Linux 无头模式运行脚本如何设置定时?
在 crontab 中调用 wps --headless --run-script=extract.js workbook.et 即可。注意为脚本同目录分配写权限,否则日志无法落盘。
刷新后文件数量不一致如何排查?
先比对 PQRefreshLog 中的计数与文件夹内 dir /b | find /c /v "" 结果;若不一致,检查是否含隐藏文件或权限被拒。Power Query 会跳过无读权限文件,并在日志中留空记录。
移动版能否查看 Power Query 结果?
可以查看刷新后的静态表,但无法编辑查询或重新刷新。需要更新时,必须回到桌面端操作。
📺 相关视频教程
Excel最快的批量提取表格名称方法
相关文章

WPS表格如何批量合并多工作簿到一个总表?
WPS表格批量合并多工作簿到总表,Power Query与VBA双方案详解,含路径、回退与性能边界。

WPS表格如何批量提取工作表名称到目录列?
WPS表格批量提取工作表名称到目录列,可用VBA脚本或内置函数,兼容2026版,支持回退与验证。

销售数据分散在12张月度表,WPS中如何按月份快速合并并汇总?
销售数据分散在12张月度表,用WPS Power Query一键合并汇总,自动识别月份字段,无需手动复制粘贴。

怎么在WPS表格中设置筛选条件并一键输出多个独立文件?
在WPS表格中用筛选条件拆分数据,一键导出多个独立文件,全程可审计、零代码,适合月度报表留痕。