一、关于应用程序Application对象
Application对象就是一个运行着的WPS表格(即ET)应用程序,它是整个应用程序根对象,在它之上没有其他程序对象了。
ET在WPS的文件夹中的图标如下:
在WPS表格运行过程中,在任务管理器中的图标也是如上图所述。
注意:不要认为Application对象是WPS程序运行时产生的顶层对象,而是WPS表格程序的运行时的顶层对象。WPS程序在运行时,可以同时在WPS程序框架之下运行表格、PPT、文档等等。
二、常用属性
Application对象的常用属性(不常用的就不列出来了)列表如下(本表摘自WPS开放平台):
名称 | 说明 |
ActiveCell | 返回一个 Range 对象,该对象代表活动窗口(顶部窗口)或指定窗口中的活动单元格。如果窗口中没有显示工作表,此属性无效。只读。 |
Selection | 为 Application 对象返回在活动窗口中选定的对象。 |
Cells | 返回一个 Range 对象,该对象代表活动工作表中的所有单元格。如果活动文档不是工作表,则此属性无效。 |
Rows | 返回一个 Range 对象,它代表活动工作表中的所有行。如果活动文档不是工作表,则 Rows 属性失效。Range 对象,只读。 |
Columns | 返回一个 Range对象,它代表活动工作表中的所有列。如果活动文档不是工作表,则 Columns 属性无效。 |
ActiveSheet | 返回一个对象,它代表活动工作簿中或指定的窗口或工作簿中的活动工作表(最上面的工作表)。如果没有活动的工作表,则返回 null。 |
Worksheets | 对于 Application对象,返回一个 Sheets集合,它代表活动工作簿中的所有工作表。对于 Workbook对象,返回一个 Sheets集合,它代表指定工作簿中的所有工作表。Sheets对象,只读。 |
ActiveWorkbook | 返回一个 Workbook 对象,该对象代表活动窗口(顶部窗口)中的工作簿。只读。如果没有打开的窗口,或者“信息”窗口或“剪贴板”窗口为活动窗口,则返回 null。 |
Workbooks | 返回一个 Workbooks 集合,该集合表示所有打开的工作簿。只读。 |
Name | 返回一个代表对象名称的 String 值。 |
Names | 返回一个 Names 集合,该集合代表活动工作簿中的所有名称。只读 Names 对象。 |
Build | 返回 ET 内部版本号。Number 类型,只读。 |
Caption | 返回或设置一个 String 值,它代表出现在 ET 主窗口标题栏中显示的名称。 |
Path | 返回一个 String 值,它代表应用程序的完整路径,不包括末尾的分隔符和应用程序名称。 |
Version | 返回一个 String 值,它代表 ET 版本号。 |
小编这里将上表进行了划分。分别按照工作表、工作簿、对象本身属性这三个维度进行划分,方便大家容易记忆与理解。
三、常用方法
Application对象的常用方法(不常用的就不列出来了)列表如下(本表摘自WPS开放平台):
名称 | 说明 |
Evaluate | 将一个 ET 名称转换为一个对象或者一个值。 |
Goto | 选定任意工作簿中的任意区域,并且如果该工作簿未处于活动状态,就激活该工作簿。 |
InputBox | 显示一个接收用户输入的对话框。返回此对话框中输入的信息。 |
Quit | 退出ET |
Run | 运行一个宏或者调用一个函数。该方法可用于运行宏编辑器编写的宏,或者运行 DLL 或 XLL 中的函数。 |
四、练习
练习一、当某“启用了宏的工作簿文件”打开的时候对WPS的表格版本进行对比,如果版本低于12(WPS的版本号12也是当前最新版本号)或者内部版本号低于某个版本(这里假定是17133版本,实事上这个版本是最最新版本,但为了有演示效果,暂设置这个版),跳出提示:版本过低,本宏表格需要高级版本,先去升级程序版本。待用户点击确认后,退出WPS表格。
要解决这个练习,我们需要:
1、要用到Application对象的本身的两个属性:一个是Build属性,另一个是Version属性。
Build属性返回的是WPS表格的版本号,而非内部版本号;
Version属性返回的是内部版本号。
比如我的WPS表格的版本号是这样的:
2、Application对象的WorkbookOpen事件。事件如何来的呢?当我们每次对表格进行一次打开、关闭、点击等等这些行为都会引发对应对象的相应事件,比如打开事件、关闭事件、点击事件。
事件是我们进行JSA编程,智能化的一个大前提。
JSA里的任何对象都有事件,利用好事件,对于我们JSA宏来说,将是一大利器。
如何设置事件?
第一步,打开WPS宏编辑器
第二步,选择事件,我们这里需要选择WorkbookOpen事件
3、编写代码
function Application_WorkbookOpen(wk)
{
let app = Application.Application;//将Application对象赋值给一个变量,缩短文本量。
//将版本号和内部版本号赋值给变量。
let build = app.Build;
let version = app.Version;
let userChoice;//这个变量用来存储用户的选择。
//做出判断,如果版本号不高于12或者内部版本号不高于17133,则提示用户软件要升级
//在用户做出选择之后,退出WPS表格
if(build <= 12 || version <= 17133)
{
userChoice = MsgBox("抱歉,由于您的WPS版本过低,暂时无法使用本系统,请升级后再试!",0,"版本提示");
}
if(userChoice == 1)
{
app.Quit();//关闭WPS表格
}
}
4、先退出打开的WPS表格,再打开。效果如下
(PS:图小了,内容看得不太清楚,但是基本演示的效果还是可以看清楚的,我现在苦恼的是怎么把这个文件的代码改回来,好能回到正常演示的轨道上来。)
练习2:当表格打开时,1、获取当前打开的表格的文件名称,并在A8单元格中显示;其中拥有的工作表数量,并在A9单元格中显示;2、在第一个工作表的A10单元格中输入“Hello,WPS JS宏!”。
因为练习1的时候把演示文档搞的没办法进入到WPS宏编辑环境了,小编这里只能再重新开启一个新的工作表进行本题练习了。
与练习1一样,要实现这个功能,需要Application对象的以下属性。
- ActiveWorkbook:用来获取当前打开的工作簿对象。
- Worksheets:用来获取当前工作簿的所有工作表
事件:
- WorkbookOpen:工作簿打开事件,用来根据事件触发程序代码。
要在工作表的某个单元格中输入内容,则还需要工作表对象的Range属性。这个属性非常重要,在以后的工作中,几乎无处不用。虽然不是本期的内容,但本期会提前讲到。
- Range:用来在单元格中输入内容。
以及工作簿的属性:
- Name:用来获取打开的工作簿的属性。
- Count:用来获取工作簿中工作表的数量
同样,像练习1那样,将事件选择好,再来写代码。
准备就绪,只欠代码了,下面是小编写好的代码。
function Application_WorkbookOpen(wk)
{
//定义一个变量,用来存贮工作表数量
let sheetsCount = Application.ActiveWorkbook.Worksheets.Count;
//定义一个变量,用来存贮工作簿路径
let bookName = Application.ActiveWorkbook.Name;
//分别对A8、A9、A10三个单元格填充文本。
Application.ActiveWorkbook.Sheets(1).Range("A8").Value2 = "当前工作簿的名称是:" + bookName;
Application.ActiveWorkbook.Sheets(1).Range("A9").Value2 = "当前工作簿有" + sheetsCount + "个工作表.";
Application.ActiveWorkbook.Sheets(1).Range("A10").Value2 = "Hello,WPS JS宏!";
}
因为本代码是需要工作簿打开时才会起作用,因此需要先关闭,再打开才能看到效果。
可以看到,已经达到我们想要的效果了。
练习3:宏运行之后,弹出一个对话框,要用户输入点内容,再在C15单元格将用户输入的内容显示出来。
练习3因为不需要文件打开时运行,因此这里我们就不需要打开事件了。
要完成这个练习,我们需要用到Application对象的以下属性和方法:
属性:
- ActiveWorkbook:用来获取当前打开的工作簿对象。
方法:
- InputBox:弹出对话框,提示用户输入内容。
工作表对象的属性:
- Range:用来在单元格中输入内容。
工作簿对象的属性:
- ActiveSheet:用来获取当前活动工作表。
代码如下。
function InputSomeText()
{
let str;//变量,用来存贮用户输入的内容
str = Application.InputBox("请输入一句祝福话语,以此鼓励自己!","用户录入");
Application.ActiveWorkbook.ActiveSheet.Range("C15").Value2 = str;
}
运行效果:
上述动图操作运行宏之一的方法:“开发工具”——>“运行宏”——>选择要运行的宏,再点击运行。
从上述演示来看,在进行编写相关代码的时候,需要注意的地方
1、当第一个对象的层次较高,想要得到较低层次的对象,需要逐级向下取得对象。
2、对象是可以作为其另一个对象的属性的。
3、对象的属性、方法的获取、调用都是通过圆点(.)运算符进行的。
4、更多的属性和方法,需要我们自己去探索、去运用才能达到熟练。