对于初学者,没接触过JavaScript语句和vba的,可能理解起来有些困难。所以我推荐面向搜索编程,对于一些js语法和函数问题现学现用都可以找到答案。对于与WPS宏相关的一些问题,可以参考WPS开放平台中的开发文档、 docs.microsoft.com 网站的开发文档、搜索vba的一些实例即可解决。

首先是如何使用WPS开放平台中的开发文档。

从上一节的 1、从零开始了解和使用WPS的js宏(JSA)图1.1的宏编辑器界面,按F1打开WPS开放平台,选择开发文档,客户端开发,选择搜索栏下面的WPS 基础接口。

如图2.0

2、从零开始了解和使用WPS的js宏(JSA)之学习方法插图

WPS 基础接口 图2.0

第一条是【从Visual Basic转到 JavaScript】,如果有点基础的话,看过这篇文档以后就可以上手操作了。

因为我是以表格为例,所以经常使用的就是图上的【表格 API 参考】。使用过VBA的朋友对这里面的对象应该都很熟悉,这些对象的属性和方法与VBA中的没什么不同,只是在使用过程中要注意语法问题。

关于JavaScript的学习教程,以头条搜索为例:

在搜索框输入:js 函数教程 w3cschool

或者输入:js 函数教程 菜鸟教程

网页出来后,在前面几条中选择非CSDN的网站即可。

2、从零开始了解和使用WPS的js宏(JSA)之学习方法插图1

搜索 图2.1

如图2.1 选择第三条打开。这些网站都是针对初学者的,根据具体案例学习应该非常容易。

下面分析一下 上一篇 最后部分代码的内容 图1.6。

function 定义常量(){ return "返回常量"}function 定义变量(){ return Application.Worksheets.Item("Sheet1").Range("a1").Value2}

如上代码,JSA 不能在函数体外定义变量常量和对象,所以定义常量和全局变量只能采取这个变通方法。

第一行代码直接使用函数返回定义的常量,这么做有两点原因:

1、定义一次全局使用,尤其是像Sheet这种工作表的名称,比如默认使用Sheet1,就可以在模块里定义这个函数,当Sheet1改名时,只要改这一个函数就行,而不用搜索全部代码进行修改。

2、JSA 宏编辑器看不到工作表(Worksheet)对象,Worksheet对象的CodeName是空值,无法在代码中直接引用对象。下面给出与VBA代码编辑器的对比:

2、从零开始了解和使用WPS的js宏(JSA)之学习方法插图2

图 2.2.0

2、从零开始了解和使用WPS的js宏(JSA)之学习方法插图3

图 2.2.1

从图2.2.0 与图2.2.1对比,可以看出,VBA 可以使用WorkSheet对象的CodeName来使用对象,这样可以防止工作表被使用者改名和更改顺序导致的错误。而JSA 宏不能使用这个特性。因此JSA宏代码完成以后,最好是对工作薄(Workbook)对象进行保护。

//JSA 代码对工作簿进行保护,第一个参数是密码,可以录入123这样的密码;//第二个参数是结构,这个为 true 将不能更改顺序、重命名、删除、复制等工作表操作//第三个参数是窗口,这个为true 将不能对单个工作表进行窗口化操作:大小及关闭;//第一个参数不使用密码,VBA代码:Application.Workbooks(1).Protect(  ,true,true);//JSA 空参数使用undefined;只要中间的参数为true就可以防止工作表被改名。Application.Workbooks.Item(1).Protect(undefined, true, true)

上面这条语句可以放到立即窗口执行:在立即窗口,复制上面这条语句,光标放在这条语句上,回车后会执行。

2、从零开始了解和使用WPS的js宏(JSA)之学习方法插图4

立即窗口调试 图 2.3

如图 2.3,在立即窗口,除了保护工作薄的语句,我还加了一条函数,这个函数测试工作薄结构是否被保护,最终得到 工作簿已保护 的显示。

第二行代码

function 定义变量(){ return Application.Worksheets.Item("Sheet1").Range("a1").Value2}

使用单元格a1存储变量值,从而模仿定义全局变量的效果。

本节内容到此结束。从下一篇开始,我将从实例出发,逐步构建一个wps宏查询报表应用。这里面涉及到表格函数应用、SQL语句表格查询、js 语法等多方面的内容。