一、關于應用程序對象

對象就是工作簿對象,每個在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();//關閉表格
		}
	}
}

我們先看運行效果:

wps的宏怎么啟用_啟用宏wps2019_wps啟用宏

每個章節的練習,大家可以放心跟著練習。

每句代碼的注釋小編力爭詳細易理解。如果有JS語法不懂的,還請移步至小編之前的教程中打好基礎。

以上代碼復制后即可運行。

小編的演示文檔會保存起來,免費提供給大家學習,如有需要關注后私信說明要哪一章節的演示文檔。

請注意:演示文檔與小編的教程同步即是小編的教程到哪一步,演示文檔就到哪一章節。

關注我,持續共同學習,一起踏上wps宏(JSA)的登山之路。

#頭條創作挑戰賽#