日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

什么是WPS.JS宏?

 hercules028 2022-06-24 發(fā)布于四川
??后臺(tái)回復(fù)js獲取更多js教程

HI,大家好,我是星光。

近2年前WPS剛剛推出JS宏的時(shí)候,咱們說(shuō)現(xiàn)在用個(gè)表格是越發(fā)不容易了,VB、SQL、JS、Python都來(lái)插一腿,聽(tīng)說(shuō)永中還支持Java,后來(lái)連Excel函數(shù)也漸趨于編程化……難怪有外國(guó)佬一本正經(jīng)的說(shuō)用好Excel的都是程序員ε=(′ο`*)))。


Image

最近JSA(WPS.JS宏的簡(jiǎn)稱)慢慢熱起來(lái)了,今天就給大家回顧一下當(dāng)初的一篇舊文,重新了解一下這么幾個(gè)重要的問(wèn)題??

? 什么是JS?

? 關(guān)于WPS.JS有沒(méi)有一些實(shí)際案例?

? JS宏和VBA有哪些不同之處?



1 丨 
什么是JS


JS是Java Script的簡(jiǎn)稱,是一門高端的動(dòng)態(tài)的弱類型的高效而通用的編程語(yǔ)言。它本身是面對(duì)Web的,但由于現(xiàn)代的Web瀏覽器,不論是電腦、能手機(jī)、甚至游戲機(jī),都包含了Java Script解釋器,這就使JS成為了史上使用最廣泛的編程語(yǔ)言之一

事實(shí)上,咱們所熟悉的VBA和M語(yǔ)言,均可以調(diào)用一部分JS功能,比如VBA調(diào)取JS處理網(wǎng)頁(yè)數(shù)據(jù),M語(yǔ)言通過(guò)網(wǎng)頁(yè)函數(shù)調(diào)用JS的正則表達(dá)式等。


2丨 
實(shí)際案例

舉幾個(gè)JS宏的實(shí)際例子吧。

1,使用JS實(shí)現(xiàn)條件語(yǔ)句

JS的條件語(yǔ)句和VBA相似,也是if和else結(jié)構(gòu)。但需要意的是,當(dāng)if判斷結(jié)果存在多條語(yǔ)句時(shí),需要使用花括號(hào){}包起來(lái),形成一條復(fù)合語(yǔ)句。

function myIF(){ let strID=Range('a1').Value2; if(!strID){ let s=Range('a2').Value2; if(s=='對(duì)') var t='公眾號(hào)Excel星球'; else var t='看見(jiàn)星光'; } else { var t='wps.js' } MsgBox(t)}

2,使用JS實(shí)現(xiàn)循環(huán)語(yǔ)句

在VBA教程里咱們講過(guò),VBA循環(huán)語(yǔ)句有3種常見(jiàn)形式,for...to計(jì)數(shù)循環(huán)、for...ecah集合循環(huán)和while條件循環(huán)。實(shí)現(xiàn)這三種循環(huán)形式的JS代碼如下:

for...to計(jì)數(shù)循環(huán)▼
function mycycle1(){  Range('a1:a10').Clear();//清空全部  for (let i=1;i<=10;i++){    Cells(i,1).Value2=i;//單元格賦值  }  MsgBox('操作完成')}

for...of集合循環(huán)▼
function mycycle2(){ for(let sht of Worksheets){//遍歷工作表集合 if(sht.Name=='看見(jiàn)星光'){//判斷工作表名稱是否為看見(jiàn)星光 MsgBox('工作表存在看見(jiàn)星光。'); return; } } MsgBox('工作表不存在看見(jiàn)星光');}

while 條件循環(huán)▼
function mycycle3(){//條件循環(huán)為a1:a10賦值  Columns.Item(1).Clear();  let i=1;  while(i<11){//如果i小于11則執(zhí)行循環(huán)體    Cells(i,1).Value2=i;    i++  }}

3,JS中的數(shù)組

眾所周知,數(shù)組是編程中最重要的數(shù)據(jù)結(jié)構(gòu)。盡管如此,由于VBA太古老了,數(shù)組基本就是最原始的狀態(tài),所以數(shù)組的各種常用方法,比如靈活的查找、動(dòng)態(tài)的增刪、以及排序、去重等等……——一個(gè)都沒(méi)有!

而JS的數(shù)組呢?方法有幾十個(gè),常用的數(shù)組串聯(lián)(join),增刪(splice),排序(sort),篩選(filter),判斷(some/every),查找(find),合并(concat),填充(fill),扁平化(flat)以及迭代的map、forEach、reduce等等。

除此之外,JS的數(shù)組也比VBA靈活許多,不但大小動(dòng)態(tài),支持一次添加多個(gè)元素,而且添加的位置也很自由,可以輕松實(shí)現(xiàn)隊(duì)列、棧等數(shù)據(jù)結(jié)構(gòu)。

舉一段簡(jiǎn)單代碼(需要注意JS的數(shù)組是以中括號(hào)[]形式包裹起來(lái)的有序元素集合)。

代碼看不全可以左右拖動(dòng)...▼
function array_test(){ let r=[];//聲明一個(gè)空數(shù)組 r[0]=1;//數(shù)組下標(biāo)為0添加一個(gè)值1 r.push(2,3);//在數(shù)組末尾添加2個(gè)元素 r.pop();//刪除數(shù)組最后一個(gè)元素 r.unshift(-1,0);//在數(shù)組開(kāi)頭添加兩個(gè)元素 r.shift();//刪除數(shù)組首個(gè)元素 Range('1:1').Clear();//清空第一行所有 Range('a1').Resize(1,r.length).Value2=r;//數(shù)組結(jié)果寫入第1行}

4,JS中的對(duì)象

數(shù)組+字典是VBA數(shù)據(jù)處理的最佳組合方案,在JS宏中也是如此。JS也有類似字典的數(shù)據(jù)結(jié)構(gòu),只是它不叫字典,叫……對(duì)象。

Image
▲誰(shuí)還沒(méi)個(gè)對(duì)象不是?

對(duì)象在JS中是使用花括號(hào){}包括起來(lái)的數(shù)據(jù)內(nèi)容,是鍵值對(duì)結(jié)構(gòu):

{key1:value1,key2:value2,...}

和字典類似,key作為鍵名是對(duì)象的屬性,value是鍵名對(duì)應(yīng)的值。鍵名可以使用數(shù)值和字符串來(lái)表示。健值可以是任意類型。通常鍵名和值之間使用冒號(hào)分隔。例如,定義一個(gè)對(duì)象obj。示例代碼如下:

function d_test1(){  var d={名字:'看見(jiàn)星光',公眾號(hào):'Excel星球'};  Console.log(d.名字);}

代碼運(yùn)行后在本地窗口顯示字符串:看見(jiàn)星光。

Image
JS對(duì)象同樣具有查改增刪等方法,相關(guān)示例代碼如下:

function d_test2(){ var d={};//創(chuàng)建一個(gè)空對(duì)象 d['姓名']='看見(jiàn)星光';//添加鍵值對(duì) d.愛(ài)好='學(xué)習(xí)';//如果沒(méi)有特殊符號(hào),添加鍵值對(duì)也可以使用點(diǎn)號(hào)操作 Debug.Print(d['姓名']);//讀取屬性姓名對(duì)應(yīng)的值 d.姓名='公眾號(hào)Excel星球';//修改姓名對(duì)應(yīng)的值 delete d.愛(ài)好;//刪除屬性愛(ài)好 Debug.Print('愛(ài)好' in d);//使用in運(yùn)算符判斷對(duì)象中是否存在指定元素 if(!d.姓名){Debug.Print('不存在')}//!運(yùn)算符 else Debug.Print('存在'); let r1=Object.keys(d);//數(shù)組形式,返回對(duì)象屬性集合 let r2=Object.values(d);//數(shù)組形式,顯示值集合 let r3=Object.entries(d);//數(shù)組形式,返回對(duì)象鍵值對(duì)}


3 丨 
JS宏和VBA的異同


從外觀上來(lái)看,JS宏的IDE和VBA長(zhǎng)的差不多,也是由工程資源管理器、屬性窗口、本地窗口等部位組成,編寫方式也和VBA相類似。

Image

兩者主要是語(yǔ)法不同。

聊幾點(diǎn)主要的不同之處。


1,過(guò)程結(jié)構(gòu)

VBA用Sub...End Sub關(guān)鍵字來(lái)定義過(guò)程,而JS用function(){}關(guān)鍵字來(lái)定義函數(shù),不存在Sub過(guò)程。

2,注釋問(wèn)題

VBA注釋使用單引號(hào)標(biāo)識(shí),JS的單行注釋使用//,多行注釋使用/*和*/

Image

3,變量問(wèn)題

VBA聲明變量,需要使用Dim關(guān)鍵字,JS使用var或者let關(guān)鍵字(兩者間的不同后面我們開(kāi)單章再聊,作為新人通常推薦使用var)。VBA變量聲明有數(shù)據(jù)類型,JS作為弱類型的編程語(yǔ)言,不需要聲明變量類型。另外,JS解釋器有自己的內(nèi)存管理機(jī)制,可以自動(dòng)對(duì)內(nèi)存進(jìn)行垃圾回收,當(dāng)不再有任何引用指向一個(gè)對(duì)象時(shí),解釋器就會(huì)自動(dòng)回收它所占用的內(nèi)存資源,這個(gè)比VBA的內(nèi)存管理更加穩(wěn)定高效。

此外,JS支持在1行語(yǔ)句中對(duì)多個(gè)變量進(jìn)行賦值。見(jiàn)下圖第3行代碼。

Image

4,語(yǔ)句問(wèn)題

首先,JS嚴(yán)格區(qū)分字母大小寫,其次,它使用分號(hào)(;)將語(yǔ)句分隔。語(yǔ)句如果各自獨(dú)占一行,語(yǔ)句間的分號(hào)通??梢允÷裕@時(shí)候換行符就等同于分號(hào)的作用——但作為初學(xué)者,還是建議大家養(yǎng)成使用分號(hào)的習(xí)慣。最后,當(dāng)將多條語(yǔ)句聯(lián)合在一起,形成一條復(fù)合語(yǔ)句時(shí),需要使用花括號(hào){}將多條語(yǔ)句括起來(lái)。

5,對(duì)象、方法和屬性問(wèn)題

VBA可以直接使用集合索引的方式引用對(duì)象,比如引用第1個(gè)工作表:

Worksheets(1).Select

JS需要增加一個(gè)Item屬性,還是引用第1個(gè)工作表,語(yǔ)句如下:

Worksheets.Item(1).Select()

比較以上兩條語(yǔ)句,你還會(huì)發(fā)現(xiàn)一點(diǎn)不同。在VBA中,方法不需要加(),而JS必須加括號(hào),比如Select()。屬性則不用加括號(hào)。

除此之外,在VBA中,單元格對(duì)象默認(rèn)讀取Value屬性,JS沒(méi)有這個(gè)默認(rèn)屬性,而且它使用的關(guān)鍵字也不是Value,而是Value2。

6,運(yùn)算符問(wèn)題

這個(gè)不一樣的地方有點(diǎn)兒多。

在VBA中判斷兩個(gè)值是否相等,使用運(yùn)算符(=),或者不等于(<>),而JS表示等號(hào)判斷的運(yùn)算符是(==),不等于的運(yùn)算符是(!=)

VBA的邏輯與是And,邏輯或是Or,邏輯非是Not。JS的輯與是&&,邏輯或是||,邏輯非是!。

VBA的文本連接符是&或+,JS不支持&,只支持+;此時(shí)要求合并的數(shù)據(jù)必須有一個(gè)是字符串,否則+就是加法運(yùn)算了。

……

沒(méi)了,以后想到啥就再補(bǔ)吧。雖然WPS的JS宏依然有很多不方便之處,但無(wú)論如何它都走出了自己的一步,不再處處追求兼容Excel,這才是走在成為國(guó)產(chǎn)之光的正確道路上對(duì)不對(duì)?只有和別人不一樣,才能發(fā)出光芒,不然頂多算個(gè)漂亮的影子。

OK,今天和大家分享的內(nèi)容就這些。我是星光,左上角點(diǎn)關(guān)注,右下角點(diǎn)個(gè)贊,更多表格精彩內(nèi)容可以點(diǎn)擊菜單→資源福利等。揮揮手,明天再見(jiàn)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多