一. 前言
使用的是wps专业版本:
百度盘链接: https://pan.baidu.com/s/1gfZjIe1WUmWin1tQ52wMrQ ; 提取码: avqg
激活码: (仅作测试使用, 请勿用于商业用途)
694BF-YUDBG-EAR69-BPRGB-ATQXH
1.1 关于JavaScript宏
相关详细内容见: WPS 开放平台.
简单来说就是wps在参照vba的基础之上, 使用JavaScript实现的wps独有的宏语言(注意这一点).
WPS宏编辑器集成了一个V8 引擎的 JavaScript 运行时, 支持大部分ES6语法, 因此宏编辑器支持JavaScript 标准内置对象
- 集成
V8引擎 - 支持
ES6(不支持的内容, 如setTimeout(), fetch等(因为是异步的操作, 都会受到限制)).
二. 基本界面
上述的专业版安装好之后, 默认就是下面的界面, 不需要额外的设置.
和office的VBE(Visual Basic Editor)开发工具基本一样, 只是进行了大幅度的魔改, VBE的东西基本还保留着, 但是在很多操作上进行了调整和变更, 例如创建和执行代码的方式等.
vbe中的窗体图形界面也得到保存, 操作和vbe基本上没有差异.
总体而言, 这个IDE基本还是和VBE一样, 依然 保留着上古时代的遗风(代码的格式风格也是和vscode等现代编辑器不同), 执行效率底下(提示代码时明显感觉卡顿, 没有现代编辑器那种完全无感的丝滑), 调试环境简陋, 如上图创建的类对象......(没有成熟的商业化产品的感觉)
但是这个工具终于有了一点现代编辑器的气息, 支持一定的代码提示.
三. 基本使用
读取表格内容
function test(){
const arr = Range('a1: b3').Value();
const a = arr[1][0] + 1;
console.log(a);
}
自定义函数, 在表格中调用
// 自定义求和函数
// 传入的函数是一个数组
function my_sum(args){
return [...args].reduce((s,e) => s+=e)
}
类
/**
* test Macro
*/
class Test{
constructor(...args){
console.log(args); // 不支持打印出内容
console.log('init');
}
}
function test()
{
const t = new Test('hello', 'wps');
console.log('nice');
}
打印内容, 并不支持数组.
/**
* test Macro
*/
function fib(num)
{
return num < 1 ? 0 : num + fib(num - 1);
}
// 没有出现堆栈溢出
// 支持尾递归优化
function test(){
console.log(fib(10000));
}
录制宏
/**
* Macro1 Macro
* 宏由 WDAGUtilityAccount 录制, 时间: 2023/08/30
*/
function Macro1()
{
(obj=>{
obj.Name = "华文中宋";
obj.Size = 12;
obj.Bold = true;
obj.Italic = true;
obj.Subscript = false;
obj.Superscript = false;
obj.Underline = xlUnderlineStyleNone;
obj.ThemeColor = 2;
obj.TintAndShade = 0;
obj.Strikethrough = false;
})(Selection.Font);
}
事件
Application.ApiEvent.AddApiEventListener("DocumentOpen", (doc)=>{alert("文档已打开, 文档名是: " + doc.Name)});
四. 小结
令人颇感意外的是, wps并未将实现js宏作为营销的重要卖点, 非常低调的上线, 也许和这个项目尚未成熟有一定关系.
总体而言, 对于熟悉JavaScript的用户, 同时掌握一定vba的, 几乎可以无缝迁移到wps的js宏上, 用起来比vba顺手的多.
对于只懂vba的用户并不建议去额外学这个东西:
- 尚未成熟, 坑多, 难解.
office依然是办公领域的统治者, 但是这个只能在wps上运行.- 对于一门语言, 不仅是实现, 其提供文档也是关键,
wps的文档也待完善.