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)的登山之路。
#頭條創作挑戰賽#
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若本站內容侵犯了原著者的合法權益,可聯系本站刪除。