已收录

联网写代码,离线来运行,借人大腿搓麻绳?——用WPS灵犀编写WPS表格JSA宏代码,不要VBA

临商珑胜
临商珑胜 WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

   

  2026年10月末的一天,我正对着WPS表格做数据透视表,小白偷偷跑了过来:"哥呀,弟弟刚找了个女朋友,在别的单位干统计,天天加班做报表,人都熬干了。你可得帮我。"

  "前几天不是教你用WPS灵犀写M语言函数代码吗?回去教教她,就有时间好好谈恋爱了。"

  "哥,她那老板太抠了——旧电脑是WIN7系统、十多年前4代CPU,WPS还是我给装的个人版。关键是单位规定上OA的电脑不能联外网、不能用AI、也不能用QUERY!我出主意让她偷偷联手机热点装插件,她说电脑有监控系统,一联就自动关机,还得遭HR'追杀'。怎么办呀?"

  小白平时工作认真、对我也尊重,我决定放大招了。我放下鼠标,慢悠悠地说:"行啊。不过咱得说清楚:离线电脑搞自动化,别用VBA,那玩意儿快成老古董了,咱用JSA——JavaScript宏,跟写网页似的,上手快。"

  "JSA?听着挺高大上,具体咋弄呢?"

  "核心思路就两步走:第一步,用你手头能联网的电脑打开WPS灵犀,把需求用大白话告诉它,让它生成JSA宏代码;第二步,把代码粘进宏编辑器,另存成.xlsm文件拷给她,她那边直接打开就能用,啥都不用装。"

📌 这是个很实用的组合场景:有网的电脑负责"研发",离线的电脑只负责"导入运行"。关键在于JSA宏可以寄生在.xlsm文件里单文件分发——不依赖网络、不依赖安装环境,只要离线机的WPS能打开文件,功能就在里面。而且JS宏在WPS个人免费版即可使用(VBA反而要专业版权限),对离线机特别友好。

  小白学电视里的古人拱了拱手:"哥哥,小弟愚钝,请好好教我!"

  

  "得了,别整虚的。来,哥演示一遍。

  "我打开"客户经理销售利润表.xlsx",另存为启用宏的.xlsm,然后打开WPS灵犀,在对话框里上传工作表表头字段(可用SHIFT+ENTER换行),完整输入需求:

  依据上面的表格示例,请用WPS表格的JSA宏(JavaScript语法,不是VBA)写一个宏代码:约100行数据。实现功能:D列计算利润=B列-C列,E列计算客户经理提成=D列×8%,保留2位小数;要求:关键步骤加中文注释;整体try/catch,出错alert提示;生成新的工作表名"提成"保存在当前打开的工作簿中;运行环境是WPS个人版、完全离线,禁止任何网络调用。

  小白凑过来:"哥,你这需求写得跟下命令似的,连'禁止网络调用'都交代上了?"

  "对喽,这就是跟AI打交道的窍门:交代得越细,它写得越靠谱。表格结构、要几列、保留几位小数、报错怎么办、什么环境下跑,一条条说明白,它就不会瞎猜。尤其是这个场景,得多嘴一句'完全离线运行',省得它生成个要联网调接口的代码,白忙活。"

  不一会儿,灵犀就把整段JSA宏代码吐了出来,还带中文注释,跟写网页的JavaScript一个模子。我把代码复制下来:点菜单『工具→开发工具→WPS宏编辑器』,不新建VBA模块,在左边工程栏右键插入一个"JSA模块",把代码原样贴进去,点保存:

/**
 * 提成计算宏(WPS表格 JSA / JavaScript 语法,非VBA)
 * 运行环境:WPS个人版,完全离线,无任何网络调用
 */
function 计算提成() {
    try {
        var wb = Application.Workbooks.Item(1); // 当前工作簿
        var ws = wb.ActiveSheet;                // 活动工作表(含示例数据)

        var usedRows = ws.UsedRange.Rows.Count; // 已用区域行数(含表头)
        if (usedRows < 2) {
            alert("当前表没有数据行,请检查。");
            return;
        }

        // 删除已存在的同名工作表,避免重名报错
        try {
            Application.DisplayAlerts = false;
            wb.Worksheets.Item("提成").Delete();
            Application.DisplayAlerts = true;
        } catch (e) { /* "提成"表不存在时忽略 */ }

        // 新建工作表"提成",放在最后
        var newWs = wb.Worksheets.Add(null, wb.Worksheets.Item(wb.Worksheets.Count));
        newWs.Name = "提成";

        var heads = ["姓名", "销售额(元)", "成本(元)", "利润(元)", "提成"];
        for (var c = 1; c <= 5; c++) newWs.Cells.Item(1, c).Value2 = heads[c - 1];

        var RATE = 0.08; // 提成比例:8%

        // 从第2行起逐行计算
        for (var i = 2; i <= usedRows; i++) {
            var name = ws.Cells.Item(i, 1).Value2;
            var sales = ws.Cells.Item(i, 2).Value2;
            var cost = ws.Cells.Item(i, 3).Value2;

            // 跳过姓名和销售额都为空的行
            if ((name === null || name === undefined || name === "") &&
                (sales === null || sales === undefined || sales === "")) continue;

            // 利润 = 销售额 - 成本(空值按0处理)
            var s = (sales === null || sales === undefined) ? 0 : Number(sales);
            var profit = s - ((cost === null || cost === undefined) ? 0 : Number(cost));

            // 提成 = 利润 × 8%,四舍五入保留2位小数
            var commission = Math.round(profit * RATE * 100) / 100;

            newWs.Cells.Item(i, 1).Value2 = name;
            newWs.Cells.Item(i, 2).Value2 = s;
            newWs.Cells.Item(i, 4).Value2 = profit;
            newWs.Cells.Item(i, 5).Value2 = commission;
        }

        // 格式:D、E列保留2位小数,表头加粗,列宽自适应
        newWs.Range("D2:E" + usedRows).NumberFormat = "0.00";
        newWs.Range("A1:E1").Font.Bold = true;
        newWs.Columns.AutoFit();

        alert("计算完成!共处理 " + (usedRows - 1) + " 行,结果已写入工作表【提成】。");
    } catch (err) {
        alert("宏运行出错:" + err.message + "(错误行号:" + (err.line || "未知") + ")");
    }
}
📌 小提示:这就是JSA宏——语法跟网页里的JavaScript是亲兄弟,var、for、try/catch都是老熟人。会点前端等于白捡;不会也无所谓,代码这关有灵犀替你写,你只管"验收"。

  "最后一步,见证奇迹。"我把光标放进"计算提成"函数里,点了"运行"(或按F5)。屏幕上"叮"地弹出:"计算完成!共处理6行数据,结果已写入工作表'提成'。"

  小白眼睛亮了:"这么快!可代码是在咱这台联网电脑跑的,她那台老古董咋用?"

  "这就是今天最妙的地方。"我把文件另存为.xlsm(WPS自家.et格式也行),"JSA宏就住在工作簿文件里,代码跟着文件走(也可导出为.js文件,别处同结构的表格再导入使用)。拷U盘或微信传给她都行。她那台离线机只要有WPS——哪怕是最普通的个人免费版——打开文件按F5,宏就在本地跑起来,全程不碰网络。"

  "等等哥,"小白举手,"宏文件打开会有安全警告,她那机器不会直接给拦了?"

  "问得好!第一次打开.xlsm,顶部有条黄色安全警告,点'启用宏'就行。要是宏功能被锁死,就在WPS里搜'宏安全性',把安全级别调到中或添加受信任位置,都在本地设置里,不用联网。"

离线分发,一张表看明白

环节

联网的电脑(你)

离线的电脑(她)

写代码

用WPS灵犀对话生成JSA宏

不需要

调试

粘进宏编辑器,F5跑通

不需要

交付

另存为.xlsm或.et,U盘/内网传过去

打开文件,点"启用宏"

使用

不需要

打开即用,本地运行,零联网

  小白掰着手指头:"联网机负责'研发',离线机只管'运行',中间靠一个.xlsm当快递包——这不就是借人大腿搓麻绳嘛!网在人家AI身上,活儿干在咱自己的离线机上。"

  "可以啊小白,都会抢答了。再送你三个进阶小贴士:

🔔 一是代码不满意就让灵犀改。比如在对话里说'帮我把提成比例改成变量放单元格B1里',它就给你改一版,不用自己动手。

  二是先拿十行假数据试跑。跑通一百行不如先跑通十行,别一上来就上真数据,万一算错了还得回头对数。

  三是try/catch别嫌啰嗦。真出了错,弹窗会告诉你错在第几步,比对着空表格抓瞎强多了——这就是需求里写'出错alert提示'的原因。"

记个三步口诀

联网让灵犀写 → 粘进宏编辑器试跑 → xlsm拷过去直接用

  适用场景:离线电脑要用自动化、单位禁AI禁外网、机器老旧跑不动大插件——只要那边WPS能打开文件,这套"借网研发、离线运行"的路子就通。前提就一条:离线机的WPS得允许运行宏,第一次打开记得点"启用宏"。

  以后需求再复杂,比如跨工作簿取数、定时自动跑,可以让灵犀接着往深了写,JSA的能力比今天演示的这段大得多。

  小白心满意足,把客户经理销售利润表.xlsm拷进U盘,哼着小曲儿走了:"哥,这周末约会我去教她,回头请你喝奶茶——加冰的!"

  我冲他背影喊了一嗓子:"先把咱这篇存好,教人的时候照着讲,省得代码忘了还得回来问哥!"


📌 说明:文中人物、单位与数据均为教学演示所虚构,功能操作以WPS个人版实际界面为准。VBA与JSA的取舍因人而异,本文仅针对"离线+免费版"这一特定场景给出一种可行方案。

临商珑胜WPS知识库
@孙胜龙
浏览 319
1
11
分享
11 +1
10
1 +1
全部评论 10
 
赵二
赵二 Lv.3 优质创作者WPS产品体验官

Lv.3 优质创作者

致敬大佬!
举报
0
1
临商珑胜
临商珑胜WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

向IT精英学习!
· 山东省
举报
0
0
 
杯莫停
杯莫停 Lv.2 潜力创作者WPS产品体验官

Lv.2 潜力创作者

过来支持一下
   浙江省
举报
0
1
临商珑胜
临商珑胜WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

非常感谢您的帮助!
· 山东省
举报
0
0
 
薛庆彬
学习了,收藏一下📚
   北京
举报
0
1
临商珑胜
临商珑胜WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

非常感谢,共同进步!
· 山东省
举报
0
0
 
HC.旋
HC.旋 WPS资深用户Lv.3 优质创作者WPS寻令官KVPWPS产品体验官

Lv.3 优质创作者

点赞支持,孙老师原来是数据老手,各种数据技能信手拈来
   福建省
举报
1
1
临商珑胜
临商珑胜WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

感谢洪老师支持!干我们审计这一行的,大多是半瓶子醋,样样通,样样稀松,多亏有灵犀!
· 山东省
举报
0
0
 
wils
wils Lv.4 核心创作者

Lv.4 核心创作者

赞👍🏻 更厉害的是,灵犀写c/c++一样易如反掌 所以只要让他写dll,就可以无限扩展js宏,这几乎做到了无所不能
   海南省
举报
1
1
临商珑胜
临商珑胜WPS产品体验官Lv.3 优质创作者

Lv.3 优质创作者

感谢您的支持帮助!我真的感觉“本事不够,灵犀来凑”!
· 山东省
举报
1
0