WPS JS宏教程,超詳細~

0基礎入門,輸入輸出、if判斷、循環(huán)、數組、單元格操作、表格操作、文檔操作,關注了解最新教程?。?!


01 JS宏設置
點擊左上角【文件】-倒數第2個,點擊【選項】-勾選【默認JS開發(fā)環(huán)境】

方法一:選擇【開發(fā)工具】-【WPS宏編輯器】。方法二:按住Alt+F11

02函數
WPS JS每條語句后面可以有“;”,也可以沒有“;”,程序都可以運行。
函數名可以用中文命名。
按F5默認會執(zhí)行最后一個函數,如下代碼就會輸出MrFlySand-公眾號:小知識酷。
alert()
就是窗口輸出,如:alert("微信公眾號:小知識酷")
console.log()
就是控制臺輸出,如:console.log("微信公眾號:小知識酷")
Debug.Print()
注意:在代碼中所有標點符號在要英文狀態(tài)下輸入。
function?輸出2(){
????alert("MrFlySand-公眾號:小知識酷-520")
}
function?輸出(){
????alert("MrFlySand-公眾號:小知識酷")
}
03單元格
3.1讀取單元格/輸出單元格
3.1.1選擇工作表
Sheets.Item()
是選中工作表,excel默認的第一個工作表名稱也是Sheet1。Sheets.Item(2)
是選中第2個工作表。圓括號()
里面可以是數字如果里面是一個數字n,表示它是第n個表。Sheets.Item("公眾號:小知識酷的成績")
是選中的是“公眾號:小知識酷的成績”工作表,注意:中文公眾號:小知識酷的成績
要在英文雙引號""
里面。
3.1.2選擇單元格
Range()
選擇單元格Value2意思就是值或元素
WPS JS可以使用運算符“+”,
"A"+2
就是A2。注意:"A"&2
是錯誤的語法
function?讀取單元格(){
??//?輸出第1個工作表的A1單元格的值
??alert(Sheets.Item(1).Range("A1").Value2)
??//?輸出工作表名為Sheet2的A2單元格的值
??alert(Sheets.Item("Sheet2").Range("A"+2).Value2)
}
3.2運用庫函數和給單元格賦值
Date()
是獲取當前時間的函數Sheets.Item(1).Range("A1").Value2 = ?Date()
意思是:第1個的工作表中A1 = 現在的日期
function?Fun(){
????Sheets.Item(1).Range("A1").Value2?=??Date();
????alert(Sheets.Item(1).Range("A1").Value2);
}
3.3設置單元格的顏色和背景
function?MyFun(){
????//選中B4單元格
????Range("B4").Select();
????//圓括號里面就是選擇B4單元格的文字
????(obj=>{
????????//改變這個字體的顏色
????????obj.Color?=?2;????????
????})(Selection.Font);
????//圓括號里面就是選擇B4單元格的內部背景
????(obj=>{
????????//改變這個背景的顏色
????????obj.Color?=?65536;
????})(Selection.Interior);
}
04 新建工作表
function?新建工作表(){
????var?sht=Worksheets.Add(null,Sheets(Sheets.Count));
????sht.Name="mrflysand的數據分析表";?//工作表的名稱
}
05 if判斷
如果第1個工作表的A1單元格的值是1,輸出“1”和“有1或2”;如果第1個工作表的A1單元格的值不是1或2,輸出“沒有1和2”。
其中
||
表示或
function?讀取單元格(){
??//?輸出第1個工作表的A1單元格的值
??alert(Sheets.Item(1).Range("A1").Value2)
??//?判斷語句
??if(Sheets.Item(1).Range("A1").Value2==1?||?Sheets.Item(1).Range("A1").Value2==2){
????alert("有1或2")
??}else{
????alert("沒有1和2")
??}
}
06 switch語句
因為a的值是1,所以匹配case 1,輸出A;如果a=3,則輸出C;如果a=其他值,輸出none
function?Desfee(){
?var?a?=?1;
????switch?(a){
????case?1:
????????alert("A")//?當表達式的結果等于?1?時,則執(zhí)行該代碼
????????break;
????case?3:
????????alert("C")//?當表達式的結果等于?3?時,則執(zhí)行該代碼
????????break;
????default?:
????????alert("none")??//?如果沒有與表達式相同的值,則執(zhí)行該代碼
?}
????alert(Desfee)
}
07 輸入框
7.1單個值
InputBox
就是輸入函數,雙引號里面的內容表示提示語
function?輸入(){
??var?num?=?InputBox("請輸入一個數");
??alert(num)
}

7.2五個參數
1、提示的內容 2、提示框的標題 3、輸入框的默認值 4、輸入框橫縱坐標軸的位置
function?輸入(){
??var?num?=?InputBox("請輸入公眾號名稱","提示框","小知識酷",200,200)
??alert(num)
}

7.3MsgBox提醒框
當你點擊“是”時,num=6,所以輸出“恭喜你關注了”; 當你點擊“否”時,num=7,所以輸出“快去微信公眾號搜索【小知識酷】關注吧”。
function?輸入(){
?var?num?=?MsgBox("你關注了【小知識酷】公眾號嗎?",jsYesNo,"提示框")
?if(num?==?6){
??alert("恭喜你關注了")
?}else{
??alert("快去微信公眾號搜索【小知識酷】關注吧");
?}
}

08循環(huán)
8.1 實例一
for(步驟1; 步驟2; 步驟4){步驟3}
,for循環(huán)的執(zhí)行步驟:
步驟1:定義i的初始值
步驟2:判斷i的值是否符合條件,如果符合條件,執(zhí)行步驟3;如果不符合條件,則結束。
步驟3:每次要執(zhí)行的內容1,如一些代碼程序
步驟4:每次要執(zhí)行的內容2,一般情況下是自增
function?Loop(){
????for(var?i=1;?i<=5;?i++){
????????alert(i)
????}
}
運行結果:
1 2 3 4 5
8.2 實例二
function?LoopArr(){
????var?arr?=?["公眾號","小知識酷","關注不迷路"]
????for(var?i=0;?i<=2;?i++){
????????Sheets.Item(1).Range("A"+(i+1)).Value2?=?arr[i]
????}
}

運行結果
?? 代碼解釋說明
i=0時,"A"+(i+1)=A1,Range("A1"),arr[0]="公眾號" i=1時,"A"+(i+1)=A2,Range("A2"),arr[1]="小知識酷" i=2時,"A"+(i+1)=A3,Range("A3"),arr[2]="關注不迷路",循環(huán)就會停止。
09數組
Resize(row,list)
選中多個單元格,相當于一個二維數組。Resize(1,5)
表示1行5列的一維數組;Resize(2,5)
表示2行5列的二維數組;Resize(5,5)
表示5行5列的二維數組。row:選中多少行
list:選中多少列
array.length
:數組的長度array:數組名
length:長度,數組里面元素個數
function?一維數組(){
????//?一維數組的定義
????arr=["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
????alert("數組里面元素個數:"+arr.length????)
????//?只在在A1單元格寫入MrFlySand
????//?只是把第一個元素放在單元格中
????Sheets.Item(1).Range("A1").Value2?=?arr;
????//?只在在A6單元格寫入MrFlySand
????//?Resize(1,1):第一個1表示只顯示1行;第2個1表示數組中第1個元素
????Sheets.Item(1).Range("A6").Resize(1,1).Value2?=?arr;
????//?在A11:C11單元格寫入"MrFlySand","公眾號:小知識酷",'QQ'
????//?Resize(1,4):1表示只顯示1行;3表示數組中前第3個元素????
????Sheets.Item(1).Range("A11").Resize(1,3).Value2?=?arr;
????//?在A16:D18單元格寫入"MrFlySand","公眾號:小知識酷",'QQ',2602629646
????//?Resize(3,arr.length):3表示顯示3行;arr.length表示數組中元素的個數,及長度為4
????//?選中的格子讀入的數據是一個一維數組
????Sheets.Item(1).Range("A16").Resize(3,arr.length).Value2?=?arr;?
}

10.1一維數組的輸出
function?arr(){
??let?arr=?["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
??Sheets.Item(1).Range("A1").Resize(1,arr.length).Value2?=?arr;
}

輸出內容
10.2一維數組的遍歷
function?Fun(){
????//?定義數組
????const?arr?=?new?Set(["MrFlySand","公眾號:小知識酷",'QQ',2602629646]);
????//i表示值,arr表示在這個數組中遍歷
????for?(let?i?of?arr)?{
??????Console.log(i);
????}
}
function?Fun1(){?????
????let?arr=?["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
????//?定義數組
????//n表示值,arr表示在這個數組中遍歷
????for(let?n?of?arr){
????????Console.log(n)
????}
}
10.3二維數組的輸出
輸出下方的表格

?? 代碼說明:
在WpsJs中數組的下標是從0開始的
二維數組的定義格式:
函數名=[["1","2"],["3","4"],["5","6","7"]]
就比如在1個數組(1個年級)中有3個數組(3個班),且這3個數組(3個班)中有2個不同的學生。arr.length
獲取1個數組(1個年級)中有幾個數組(n個班)arr[0].length
獲取1班的人數,有2個學生,分別是1、2arr[1].length
獲取2班的人數,有2個學生,分別是3、4arr[2].length
獲取3班的人數,有3個學生,分別是5、6、7
function?二維數組(){
????//?二維數組的定義
????arr=[["MrFlySand","公眾號:小知識酷",'QQ',2602629646],[2602629646,'QQ',"公眾號:小知識酷","MrFlySand"]];
????
????//?輸出二維數組的行數和列數
????alert("行數:"?+?arr.length?+?",列數:"+arr[0].length)
????
????//?輸出二維數組的2行3列的值/輸出第2個學生的英文名
????alert("2行3列的值:"?+?arr[1][3]);
????
????//?輸出二維數組的1行/輸出第1個學生的所有個人信息
????Sheets.Item(1).Range("A1").Resize(1,arr[0].length).Value2?=?arr[0]?
????
????//?輸出二維數組的2行/輸出第2個學生的所有個人信息
????Sheets.Item(1).Range("A2").Resize(1,arr[0].length).Value2?=?arr[1]?????????
}
10.4數組輸出行和輸出列
arr1
是一個一維數組,輸出顯示的是一橫排。arr2
是一個二維數組,輸出顯示的是一豎排。
function?arr(){
??let?arr=?["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
??Sheets.Item(1).Range("A1").Resize(1,arr.length).Value2?=?arr;
??let?arr1=?["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
??Sheets.Item(1).Range("A3").Resize(4,4).Value2?=?arr1;???
??let?arr2?=?[["MrFlySand"],["公眾號:小知識酷"],['QQ'],[2602629646]];
??Sheets.Item(1).Range("A8").Resize(4,1).Value2?=?arr2;?????????
}

以上代碼輸出內容
10.5使用循環(huán)輸出列
function?arr2(){
????let?arr=?["MrFlySand","公眾號:小知識酷",'QQ',2602629646];
????for(var?i=1,j=0;?j<=arr.length;?i++,j++){
????????Sheets.Item(1).Range("A"+i).Value2?=?arr[j];????????????
????}
}
11類的使用
//?聲明類
class?Arms{?
??//?構造函數,給屬性傳值?
??constructor(name,?attack)?{
????this.name?=?name;
????this.attack?=?attack;
??}
?
??//返回當前裝備的屬性值
??toString()?{
????return?'名稱:'?+?this.name?+?',?攻擊力:'?+?this.attack?+?'';
??}
}
?
function?類(){
????//定義類
????let?arr=new?Arms("AK47-MrFlySand",88)
????//?輸出類
????alert(arr.toString())
????Sheets.Item(1).Range("A1").Value2?=?arr.toString();
}