乐于分享
好东西不私藏

WPS JSP宏:选文件、输关键字、点运行——拆表就这么简单

WPS JSP宏:选文件、输关键字、点运行——拆表就这么简单

筛选、复制、粘贴、另存为……重复到怀疑人生? 一个 JS 宏,三步收工。

手动拆表,大概是 Excel 最无聊的体力活

只要你做过报表、人事、财务或者项目管理,就一定收到过这种需求:

“按部门拆开,每人发一份。”“按月份拆,一个文件一个月。”

然后你的操作流程就变成了:

筛选 → 复制 → 新建 → 粘贴 → 另存为 → 关闭 → 下一个 → 下一个 → 下一个……

一张总表拆完,一个下午没了。文件名还得一个个检查,生怕”销售部”打成”销售部 “多一个空格,第二天被同事笑话。

这件事,其实可以 10 秒干完。

这个 JS 宏干了什么

两件事:

1. 不挑文件来源

不局限于当前打开的工作簿。运行宏后弹窗选文件,一次可以选择(.xlsx / .xlsm / .xls),散落在不同文件夹的也能拆。

2. 按关键字筛,不筛就全拆

想只拆名称带”部门”的工作表?输入”部门”,它只对匹配的表动手。 什么都不填、直接回车,它就把所有工作表全部拆成独立文件。

跑起来的效果

想象一下:

  1. 打开 WPS → 开发工具 → 粘贴代码
  2. 运行宏 → 选文件(全选要拆的 Excel)→ 输入关键字,或直接回车
  3. 选个保存文件夹 → 确定

窗口一闪,文件夹里整整齐齐躺着一排拆好的文件。格式不动,数据不少,文件名自动处理,非法字符自动替换为下划线。

完整代码,直接粘贴就能用

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() != -1return;var selectedFiles = [];for (var i = 1; i <= filePicker.SelectedItems.Count; i++) {    selectedFiles.push(filePicker.SelectedItems.Item(i));  }// 第2步:输入关键字(留空则拆分所有工作表)var keyword = InputBox("请输入工作表名称包含的关键字(留空则拆分所有工作表)","输入关键字"  );if (keyword == nullreturn;// 第3步:选择保存文件夹var folderPicker = Application.FileDialog(4);  folderPicker.Title = "请选择拆分后文件的保存目录";if (folderPicker.Show() != -1return;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 宏?三分钟上手

  1. 打开 WPS 表格,新建空白文档
  2. 如果菜单栏没有「开发工具」:「文件」→「选项」→「自定义功能区」→ 勾选「开发工具」→ 确定
  3. 点击「JS 宏」→ 左侧「模块」右键 →「插入」→「模块」
  4. 把上面代码全部粘贴进去 → 关闭编辑器
  5. 回到 WPS 界面 →「JS 宏」→ 选 test2 →「运行」
  6. 按弹窗提示:选文件 → 输关键字(或直接回车)→ 选文件夹 → 完成

就这么几行代码,能省多少事?

  • 不限来源:谁的 Excel 都能拆,打开就能用
  • 关键字灵活:想拆含”2024″的、含”部门”的,输入即可
  • 全拆也行:不输关键字,一张总表瞬间裂变
  • 零出错率:自动命名、保留格式,比手动复制靠谱一百倍
  • 不求 IT:WPS 自带功能,自己写好,反复用

下次同事问你怎么这么快

你就把代码发过去,然后说:

“贴进去,点运行,就完了。”

关电脑,下班。 窗外的晚霞比加班费好看。

转发给还在手动拆表的人

收藏备用,转给需要的人。 搬运请带原文链接。

需要源码文件? 关注后回复”20260621″,获取完整 示例文件下载链接。