WPS JSP宏:选文件、输关键字、点运行——拆表就这么简单
筛选、复制、粘贴、另存为……重复到怀疑人生? 一个 JS 宏,三步收工。
手动拆表,大概是 Excel 最无聊的体力活
只要你做过报表、人事、财务或者项目管理,就一定收到过这种需求:
“按部门拆开,每人发一份。”“按月份拆,一个文件一个月。”
然后你的操作流程就变成了:
筛选 → 复制 → 新建 → 粘贴 → 另存为 → 关闭 → 下一个 → 下一个 → 下一个……
一张总表拆完,一个下午没了。文件名还得一个个检查,生怕”销售部”打成”销售部 “多一个空格,第二天被同事笑话。
这件事,其实可以 10 秒干完。
这个 JS 宏干了什么
两件事:
1. 不挑文件来源
不局限于当前打开的工作簿。运行宏后弹窗选文件,一次可以选择(.xlsx / .xlsm / .xls),散落在不同文件夹的也能拆。
2. 按关键字筛,不筛就全拆
想只拆名称带”部门”的工作表?输入”部门”,它只对匹配的表动手。 什么都不填、直接回车,它就把所有工作表全部拆成独立文件。
跑起来的效果
想象一下:
-
打开 WPS → 开发工具 → 粘贴代码 -
运行宏 → 选文件(全选要拆的 Excel)→ 输入关键字,或直接回车 -
选个保存文件夹 → 确定
窗口一闪,文件夹里整整齐齐躺着一排拆好的文件。格式不动,数据不少,文件名自动处理,非法字符自动替换为下划线。
完整代码,直接粘贴就能用
functiontest2() {// 第1步:选择要拆的 Excel 文件(可多选)var filePicker = Application.FileDialog(3); filePicker.Title = "请选择要拆分工作表的 Excel 文件(可多选)"; filePicker.Filters.Clear(); filePicker.Filters.Add("Excel 文件", "*.xlsx; *.xlsm; *.xls"); filePicker.AllowMultiSelect = true;if (filePicker.Show() != -1) return;var selectedFiles = [];for (var i = 1; i <= filePicker.SelectedItems.Count; i++) { selectedFiles.push(filePicker.SelectedItems.Item(i)); }// 第2步:输入关键字(留空则拆分所有工作表)var keyword = InputBox("请输入工作表名称包含的关键字(留空则拆分所有工作表)","输入关键字" );if (keyword == null) return;// 第3步:选择保存文件夹var folderPicker = Application.FileDialog(4); folderPicker.Title = "请选择拆分后文件的保存目录";if (folderPicker.Show() != -1) return;var saveFolder = folderPicker.SelectedItems.Item(1);if (saveFolder.slice(-1) != "\\") saveFolder += "\\";// 去除文件名中的非法字符functionsanitizeFileName(name) {return name.replace(/[\\\/\:\*\?"<>\|]/g, "_"); }var originalScreenUpdating = Application.ScreenUpdating;var originalDisplayAlerts = Application.DisplayAlerts;Application.ScreenUpdating = false;Application.DisplayAlerts = false;try {for (var f = 0; f < selectedFiles.length; f++) {var filePath = selectedFiles[f];var wb = null;for (var j = 1; j <= Workbooks.Count; j++) {if (Workbooks.Item(j).FullName == filePath) { wb = Workbooks.Item(j);break; } }var openedByUs = false;if (wb == null) { wb = Workbooks.Open(filePath); openedByUs = true; }for (var k = 1; k <= wb.Sheets.Count; k++) {var ws = wb.Sheets.Item(k);var shouldCopy = false;if (keyword === "" || keyword == null) { shouldCopy = true; } else {if ( ws.Name.toLowerCase().indexOf(keyword.toLowerCase()) != -1 ) { shouldCopy = true; } }if (!shouldCopy) continue; ws.Copy();var safeName = sanitizeFileName(ws.Name);var newFilePath = saveFolder + safeName + ".xlsx";ActiveWorkbook.SaveAs(newFilePath);ActiveWorkbook.Close(); }if (openedByUs) { wb.Close(false); } } } catch (ex) {Application.ScreenUpdating = originalScreenUpdating;Application.DisplayAlerts = originalDisplayAlerts;throw ex; }Application.ScreenUpdating = originalScreenUpdating;Application.DisplayAlerts = originalDisplayAlerts;}
第一次用 WPS JS 宏?三分钟上手
-
打开 WPS 表格,新建空白文档 -
如果菜单栏没有「开发工具」:「文件」→「选项」→「自定义功能区」→ 勾选「开发工具」→ 确定 -
点击「JS 宏」→ 左侧「模块」右键 →「插入」→「模块」 -
把上面代码全部粘贴进去 → 关闭编辑器 -
回到 WPS 界面 →「JS 宏」→ 选 test2→「运行」 -
按弹窗提示:选文件 → 输关键字(或直接回车)→ 选文件夹 → 完成
就这么几行代码,能省多少事?
-
不限来源:谁的 Excel 都能拆,打开就能用 -
关键字灵活:想拆含”2024″的、含”部门”的,输入即可 -
全拆也行:不输关键字,一张总表瞬间裂变 -
零出错率:自动命名、保留格式,比手动复制靠谱一百倍 -
不求 IT:WPS 自带功能,自己写好,反复用
下次同事问你怎么这么快
你就把代码发过去,然后说:
“贴进去,点运行,就完了。”
关电脑,下班。 窗外的晚霞比加班费好看。
转发给还在手动拆表的人
收藏备用,转给需要的人。 搬运请带原文链接。
夜雨聆风