JSA宏教程WPS表格常用内置对象——工作簿(Workbook)对象
一、关于应用程序对象
对象就是工作簿对象,每个在WPS应用程序中打开的工作簿都是一个对象。该对象的父对象就是对象。
而多个对象在一起,就组成了对象的集合。每一个对象就代表着WPS打开了一个启用了宏的工作簿,有几个对象就意味着打开了几个对应的工作簿。
通过(序号)或者(工作簿名)可以获取一个指定序号的对象。序号的确定是由打开的先后顺序排列的。
例如打开了多个工作簿,第三个打开的工作簿的名是“.xlsx”。当我们想在这多个工作簿的集合中获取这第三个工作簿对象的时候,我们可以通过如下形式获取:
Application.Workbooks(3);
Application.Workbooks('book3.xlsx');
//除了上述两种之外,还可以采取下面的两种
Application.Workbooks.item(3);
Application.Workbooks.item('book3.xlsx');
二、对象的方法和属性
以下方法和属性来自于WPS开放平台,小编仅做一下排序分类。
方法
名称
说明
激活与工作簿相关的第一个窗口。
关闭对象。
新建一个窗口或者创建指定窗口的副本。返回值类型为。
Save
保存对指定工作簿所做的更改。
在另一不同文件中保存对工作簿所做的更改。
将指定工作簿的副本保存到文件,但不修改内存中的打开工作簿。
属性
名称
说明
返回一个对象,它代表活动工作簿中或指定的窗口或工作簿中的活动工作表(最上面的工作表)。如果没有活动的工作表,则返回 。
返回一个 集合,它代表指定工作簿中所有工作表。 对象,只读。
返回一个 集合,它代表指定工作簿中所有工作表。 对象,只读。
如果指定工作簿有密码保护,则该属性值为 True。 类型,只读。
返回工作簿的文件格式和/或类型。类型,只读。
返回对象的名称(以字符串表示),包括其磁盘路径。 型,只读。
Name
返回一个 值,它代表对象的名称。
返回一个 集合,它代表指定工作簿的所有名称(包括所有指定工作表的名称)。 对象,只读。
Path
返回一个 值,它代表应用程序的完整路径,不包括末尾的分隔符和应用程序名称。
如果对象以只读方式打开,则返回 True。 类型,只读。
如果指定工作簿从上次保存至今未发生过更改,则该属性值为 True。 类型,可读写。
如果不使用对象识别符,则该属性返回一个 对象,该对象表示 ET 应用程序。如果使用对象识别符,则该属性返回一个表示指定对象(可对一个 OLE 自动操作对象使用本属性来返回该对象的应用程序)创建者的 对象。只读。
返回一个 集合,它代表指定工作簿中所有窗口。 对象,只读。
以上属性列表中,三种不同底色,分别按工作表对象及集合、工作簿的文件属性以及应用程序级别的属性进行分类。
三、练习及讲解
练习1:
编写一个宏,实现如下功能:1、汇总统计当前WPS应用程一共打开了几个表格工作簿,并在A1单元格中进行列示,从A2开始向下填充打开的工作簿的文件名;2、在B2到D2单元格按行列出A2单元格中工作簿中工作表数量、文件类型、是否有密码保护;3、关闭除当前工作簿之外的其他工作簿:如果工作簿发生改动,就自动保存该工作簿再关闭,未发生改动,则直接关闭。
代码以及每句代码的解释如下:
function 工作簿对象练习1()
{
/*1、汇总统计当前WPS应用程一共打开了几个表格工作簿,并在A1单元格中进行列示
从A2开始向下填充打开的工作簿的文件名;
***************************************************************
定义两个变量,wbCount和wbNames
wbCount:是用来存放WPS一共打开了几个表格工作簿的数量的。
Application.Workbooks表示WPS打开的所有工作簿,是一个Workbooks集合,
Count是获取集合元素数量的属性。
wbNames:在此被定义成一个数组,用来存放所有打开的工作簿的文件名
*/
let wbCount = Application.Workbooks.Count;
let wbNames = [];
/*
for(const wb of Application.Workbooks):意思是遍历WPS打开的所有工作簿对象,并将每一次
遍历的对象临时存放在wb变量中
wbNames.push(wb.Name):意思是将wb对象的文件名存放在数组wbNames的末尾。
array.push():是数组的常用方法。
for ... of循环语句,是遍历集合对象元素的常用循环语句。
*/
for(const wb of Application.Workbooks)
{
wbNames.push(wb.Name);
}
/*
let activeWB = Application.ActiveWorkbook:定义一个变量activeWB,用来存放当前活动工作簿对象
Application.ActiveWorkbook:是获取当前正在被用户操作的工作簿
*/
let activeWB = Application.ActiveWorkbook;
/*
activeWB.ActiveSheet.Range("A1").Value2:给当前活动工作簿的活动工作表中的A1单元格设置内容
activeWB:当前活动工作簿
ActiveSheet:当前活动工作表
Range("A1"):A1单元格
Value2:单元格的值:
*/
activeWB.ActiveSheet.Range("A1").Value2 = '当前WPS应用程序一共打开了'+ wbCount + '个工作簿';
/*
将数组中的元素按顺序填充到指定单元格中
将数组中的元素,从A2单元格开始向下填充。
for()循环是常用的遍历数组的循环语句。
常用的遍历数组的循环语句还有for...Each语句
在这里,我们选择了for(),因为单元格的行号需要用到数字进行切换。
*/
for(let i = 0; i < wbNames.length; i++)
{
activeWB.ActiveSheet.Range("A"+(i+2)).Value2 = wbNames[i];
}
/*
2、在B2到D2单元格按行列出A2单元格中工作簿中工作表数量、文件类型、是否有密码保护
*************************************************************************
Application.Workbooks(wbNames[i]).Sheets.Count:获取工作簿中工作表的数量
Application.Workbooks(wbNames[i]).FileFormat==52?"打开启用的 XML 工作簿宏":"其他文件";
获取文件的格式,在WPS的JSA宏中,文件的格式有多种,可以参考WPS开发文档进行查找。
52表示的是开启了宏的工作簿文件。
Application.Workbooks(wbNames[i]).HasPassword?"有密码保护":"无密码保护";
获取工作簿是否有密码保护的属性。HasPassword就是workbook的该属性。
条件?Value1:Value2 是三目运算符,意思是条件成立,返回Value1,条件不成立返回Value2
*/
for(let i = 0; i < wbNames.length; i++)
{
activeWB.ActiveSheet.Range("B"+(i+2)).Value2 = Application.Workbooks(wbNames[i]).Sheets.Count;
activeWB.ActiveSheet.Range("C"+(i+2)).Value2 = Application.Workbooks(wbNames[i]).FileFormat==52?"打开启用的 XML 工作簿宏":"其他文件";
activeWB.ActiveSheet.Range("D"+(i+2)).Value2 = Application.Workbooks(wbNames[i]).HasPassword?"有密码保护":"无密码保护";
}
/*
3、关闭除当前工作簿之外的其他工作簿
如果工作簿发生改动,就自动保存该工作簿再关闭,未发生改动,则直接关闭。
for ... of循环语句,是遍历集合对象元素的常用循环语句。
for(const wb of Application.Workbooks):意义与第一问一致。
if(wb !== activeWB):意思是如果遍历到的工作簿对象不是当前工作簿,则要运行if语句块中的语句。
if(!wb.Saved) wb.Save();//如果表格文档发生了改动,在关闭前先保存
wb.Close();//关闭表格
*/
for(const wb of Application.Workbooks)
{
if(wb !== activeWB)
{
if(!wb.Saved) wb.Save();//如果表格文档发生了改动,在关闭前先保存
wb.Close();//关闭表格
}
}
}
我们先看运行效果:
每个章节的练习,大家可以放心跟着练习。
每句代码的注释小编力争详细易理解。如果有JS语法不懂的,还请移步至小编之前的教程中打好基础。
以上代码复制后即可运行。
小编的演示文档会保存起来,免费提供给大家学习,如有需要关注后私信说明要哪一章节的演示文档。
请注意:演示文档与小编的教程同步即是小编的教程到哪一步,演示文档就到哪一章节。
关注我,持续共同学习,一起踏上wps宏(JSA)的登山之路。
#头条创作挑战赛#
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。