WPS表格如何按指定列内容批量生成文件夹?

功能定位:为什么要在表格里“长”出文件夹
当项目清单、客户名单或SKU编码已经躺在WPS表格里,手动右键新建文件夹再重命名,不仅低效,还容易打错字。把“列值→文件夹”这件事自动化,本质是把结构化数据一次性映射为磁盘目录,后续做批量归档、按客户分仓、上传云盘都能直接复用同一套命名规则。
WPS 表格本身没有“一键生成文件夹”按钮,但借助内置的“脚本工具”(Windows 版叫“WPS 宏编辑器”,Mac 版叫“Scripts”)可以调用系统命令,在本地或外接硬盘批量 mkdir。整个流程无需安装第三方插件,也绕开了付费API,属于零成本、可溯源、可回退的轻量级自动化。
版本与入口差异:Win 与 Mac 的路径对照
截至当前的最新版本(春季更新 12.8.1.3762),Windows 桌面版在“工具”选项卡下新增“脚本工具”图标;Mac 版则把同一功能收在“窗口→脚本面板”。如果找不到,可在顶部搜索框输入“脚本”快速定位。两者语法都兼容 ECMAScript 2020,但 Mac 版沙箱更严格,无法直接调用 shell 命令,需要走 Finder 的 AppleScript 桥接。
提示:公司电脑若禁用宏,需先让IT把wps.exe加入杀毒白名单,否则脚本会报“无权限创建对象”。
核心三步:从数据列到磁盘目录
Step1 清洗列值,消灭非法字符
Windows 文件夹名不得含 \ / : * ? " < > |,Mac 虽允许部分符号,但跨平台协作时仍建议统一规则。可在右侧插入辅助列,输入公式:
=SUBSTITUTE(SUBSTITUTE(A2,"/","-"),":","")
向下填充后,把结果复制→右键“选择性粘贴为值”,原列即可隐藏。
Step2 打开脚本工具,贴入批量 mkdir 代码
Windows 示例脚本(假设目标根目录为 D:\Projects,列值在 B 列,从第2行开始):
const fso = new ActiveXObject("Scripting.FileSystemObject");
const root = "D:\\Projects\\";
for (let i = 2; i <= Range("B" + Rows.Count).End(-4162).Row; i++) {
const dir = root + Range("B" + i).Text;
if (!fso.FolderExists(dir)) fso.CreateFolder(dir);
}
点击“运行”后,底部状态栏会提示“已完成”,此时打开资源管理器即可看到同名文件夹。
Step3 Mac 版走 AppleScript 桥接
Mac 版脚本面板不能直接调用 Shell,需要先生成 AppleScript 文本再让系统执行:
const colB = Range("B2:B" + Range("B" + Rows.Count).End(-4162).Row).Texts;
let script = "tell application \"Finder\" to make new folder at (POSIX file \"/Users/yourname/Projects\") with properties {name:\"";
colB.forEach(t => script += t + "\"}");
app.doShellScript(`osascript -e '${script}'`);
注意:路径中的 yourname 需换成真实用户名;若文件夹已存在,Finder 会抛错,可在脚本前加 try 块忽略。
可选增强:按多级路径生成子目录
如果表格里同时有“客户编号+日期”,想生成“客户编号\2026-03-24”这种两级目录,只需把脚本里的 dir 变量改成:
const dir = root + Range("B" + i).Text + "\\" + Utilities.formatDate(new Date(), "GMT+8", "yyyy-MM-dd");
经验性观察:嵌套两层以上后,Windows 的 260 字符路径上限容易被触发,建议把根目录放在盘符根下,如 D:\\,并在脚本里加一段判断长度超过 200 就弹出警告。
回退与撤销:脚本跑错了怎么办
脚本一旦运行,WPS 不会自动记录“创建了哪些文件夹”,所以最好在跑之前先让脚本输出一份日志:
Console.log("Created: " + dir);
日志会显示在脚本编辑器的“输出”面板,复制到文本文件留存。如需回退,可用相同逻辑批量 rmdir,或把日志文件交给 Everything、Listary 等搜索工具一键定位后手动删除。
权限与合规:公司电脑能不能跑
脚本本质调用的是本机文件系统接口,不会上传云端,但仍需遵守两点:
- 若公司部署了 EDR(终端检测响应),ActiveXObject 可能被标记为“可疑进程”,需提前把 wps.exe 加入白名单;
- 生成的文件夹若含客户姓名、订单号等个人信息,需确保磁盘已开 BitLocker 或 FileVault,否则物理丢失硬盘即等同数据泄露。
性能边界:一次最多能建多少文件夹
经验性观察:在 NVMe 固态+16 GB 内存环境下,一次性创建 5 000 个空文件夹耗时约数十秒;超过 1 万条后,WPS 脚本编辑器会出现“假死”进度条,建议分批执行,每批 3 000 行,跑完再续下一批。
与云盘联动:批量建好后如何秒级同步
若根目录位于“WPS 云盘”本地同步文件夹,脚本创建完目录后,KuafuSync 2.0 会在数秒内把空目录结构上传至云端,方便手机端或同事直接往里拖文件。空目录不占流量,但文件夹命名冲突时,云盘会自动在后缀加“_1”,导致后续脚本再次运行时无法识别,需提前在云盘设置里关闭“自动重命名”。
常见报错对照表
| 报错信息 | 可能原因 | 处置办法 |
|---|---|---|
| ActiveX 组件无法创建 | 杀毒软件拦截 | 把 wps.exe 加入白名单,或临时关闭“实时防护”再跑 |
| 路径中存在非法字符 | 列值含 / : * ? | 用 SUBSTITUTE 公式提前清洗 |
| Mac 提示 “osascript: can’t open file” | 路径空格未转义 | 把路径用双引号包裹,并把空格替换成 \ |
适用/不适用场景清单
- 适用:电商运营按订单号建客户资料夹;HR 按员工编号建电子档案;老师按学号收作业。
- 不适用:需要实时协作改名的场景(云盘重命名冲突多);路径深度超过 5 级且总长 200 字符以上;公司IT策略完全禁用宏。
最佳实践速查表
- 先在小样本 10 行跑通,再全量执行;
- 生成日志文件并留存 30 天;
- 目录根路径尽量放在盘符根目录,减少层级;
- 列值提前做“ Trim+清洗符号 ”,避免空格首尾;
- 跑脚本前关闭云盘“自动重命名”,防止后缀 _1 混乱。
FAQ:脚本批量建文件夹常见疑问
脚本能否在安卓端 WPS 运行?
不能。安卓版无脚本工具入口,需把文件传到 Windows/Mac 完成操作后再同步回手机。
建好的文件夹如何批量改名?
可再写一段循环读取新列值,用 fso.MoveFolder 原路径→新路径;改名前务必再跑一遍日志,防止覆盖。
能否直接建在共享盘符 \\192.168.x.x?
可以,把 root 改成 UNC 路径即可,但要确保本机已保存共享凭据,否则脚本会因网络认证弹窗而中断。
收尾:下一步还能做什么
文件夹只是容器,真正的价值在于后续动作:把“目录生成”与“模板复制”“权限设置”“云盘分享”串成一条自动化链,就能实现“表格里新增一行,全流程自动开案”。建议先跑通本文的三步脚本,再逐步把复制模板、写入汇总表、发送邮件通知等节点拼进去,让 WPS 表格成为整个流程的触发器,而不是终点。