WPS JavaScript宏简单体验

一. 前言

使用的是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等(因为是异步的操作, 都会受到限制)).

二. 基本界面

上述的专业版安装好之后, 默认就是下面的界面, 不需要额外的设置.

img

officeVBE(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)});

四. 小结

img

令人颇感意外的是, wps并未将实现js宏作为营销的重要卖点, 非常低调的上线, 也许和这个项目尚未成熟有一定关系.

总体而言, 对于熟悉JavaScript的用户, 同时掌握一定vba的, 几乎可以无缝迁移到wpsjs宏上, 用起来比vba顺手的多.

对于只懂vba的用户并不建议去额外学这个东西:

  • 尚未成熟, 坑多, 难解.
  • office依然是办公领域的统治者, 但是这个只能在wps上运行.
  • 对于一门语言, 不仅是实现, 其提供文档也是关键, wps的文档也待完善.