最近使用了一下wps的宏本地客户端功能进行了数据查询,与vba相比感觉还是比较好用的。(所谓本地客户端就是指单机使用运行的wps程序)
VBA因为长时间的发展,胜在功能比较强大,支持一些ActiveX对象和WindowsAPI的调用。但是缺点也很明显,一是安全性不够好,一些木马和病毒经常利用这个脚本强大的功能,二是兼容性不够好,换台电脑或者换个MSOffice版本,很可能就出错了。
vba IDE 界面(图1.0)
WPS JS宏也叫JSA,去掉了VBA一些对象和windowsAPI调用功能。其他的方面,JSA官方开发文档的原文是:“WPS宏编辑器集成了一个V8 引擎的 JavaScript 运行时,支持大部分ES6语法,因此宏编辑器支持JavaScript 标准内置对象,注意,JS内置对象和浏览器的内置对象是不同的,WPS宏编辑器集成的是JavaScript 运行时,而不是浏览器,因此WPS宏编辑器不支持浏览器的内置对象。”,因此,JSA不必太过考虑兼容性,如果会一点js语法的话,上手会很快。
jsa IDE 界面(图1.1)
下面从零开始学习这个非常有用的工具,全程以表格的使用为例。
首先,打开wps,新建空白表格,进入【开发工具】菜单。如图1.1。
我们先定义一个自定义函数,测试一下:如图1.2
function testFunction(){
var t="hello world"
alert(t)
}
图1.2
可以看到,这个IDE还是比较好用的,录入代码时有提示,并且键入(){}"" '' 等这些成对的英文符号时,只需按一个就行,另一个自动补全。光标自动的定位到中间。
使光标在函数体中间,点击运行按钮,弹出"hello world"的对话框。如图1.3
图1.3
下面,把代码改成如下的样子,即在每行的语句结束处加上“;”这个英文分号,点击运行:
function testFunction(){
let t="hello world";
alert(t);
}
可以看到,能成功运行。
接下来,把代码改成一行的格式:function testFunction(){let t="hello world"; alert(t);}。可以成功运行。
把代码中的分号删除:function testFunction(){let t="hello world" alert(t) }。
弹出错误,如图1.4
图1.4
说明JSA代码语句分割可以用英文分号,也可以与vba一样用换行分割。
接下来把代码改成如下样子:
var t="hello world"
function testFunction(){
alert(t)
}
运行后如图1.5,提示 “ 语法错误:函数外不能使用赋值表达式,变量初始化和函数调用。”
图1.5
接下来把代码改成:
var t
function testFunction(){
t="hello world"
alert(t)
}
再改成:
let t //或者 const t
function testFunction(){
t="hello world"
alert(t)
}
都与图1.5的错误差不多:即JSA 不能在函数体外定义常量和变量
既然不能在函数体外定义常量和变量,那么只能曲线救国,结合表格在需要的时候使用函数定义常量和全局变量。
function 定义常量(){ return "返回常量"}
function 定义变量(){ return Application.Worksheets.Item("Sheet1").Range("a1").Value2}
function 测试函数(){
let c = 定义常量()
alert(c)
let v =定义变量()
alert(v)
}
图1.6
具体示例下回分解。