01 VBA与JSA --从Visual Basic转到 JavaScript

01 WPS Office js详细开发文档:
02 Office 自动化(VBA与JSA):

一、 JSAPI接口的差异

1. 方法的差异

(1) VB的方法可以不加括号,但JSAPI中所有的方法都需要加括号,如果方法不加括号会被js语法判定为属性。

vb:复制js:复制
Application.Workbooks(1).CloseApplication.Workbooks.Item(1).Close()

(2) VB的方法支持给部分参数赋值。但JS对缺省的参数需要用undefined占位补齐,如下面例子中为Find方法的第一和第三个参数赋值,在js中Find方法第二个参数需要用undefined占位补齐

vb:复制
Range(“A1:N29”).Find(“香港特别”, LookIn:=xlValues).Select
js:复制
Application.ActiveSheet.Range(“A1:N29”).Find(“我”,undefined, xlValues).Select();

(3) vb可通过数组方式取集合中的对象,jsapi必须通过Item方法获取集合中的对象,其中要注意二维数组取值时需要将value要改成Value2

vb:复制js:复制
Application.Workbooks(1).CloseApplication.Workbooks.Item(1).Close()

//以下是二维数组的取值方法

vb:复制js:复制
cells(2,3).valueApplication.Cells.Item(2,3).Value2

2. 属性的差异

(1) vb中调用书写错误的属性会报错,js不会报错,这是一个bug,所以特别注意。

js:复制
Application.ActiveDocument.Name111 不报错

(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替

vbjs
MsgBox (Application.ThisDocument.Name)MsgBox (Application.ActiveDocument.Name)

3. 事件的差异

jside的导航栏展示和自动补全的事件比较少,但js支持的事件基本和vb一致,下面给出一个vb事件转换为jside中事件的例子

vb
Private Sub Workbook_SheetSelectionChange(ByVal Target As Range)
Dim i As Integer
IF Target.Column>6 And Target.Column>37 && Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> “”
Then
    With Target.Validation
        .Delete
        .Add Tpye:=xlValidateList,AlertStyle:=xlValidAlertStop,Operator:=xlBetween,Formular1:="=区域城市!$A2:$A30000")
        .IncellDropdown = true
js:
function Workbook_SheetSelectionChange(Sh, Target) {
    if(Target.Column>6 && Target.Column>37 && Target.Row>6 && (Target.Row)%2n==1 && Cells.Item(Target.Row -1n, 5).Value2 !==””) {
        var temptarget = Target.Validation
        temptarget.Delete()
        temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
        temptarget.IncellDropdown = true
    }
}

(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替

vbjs
MsgBox (Application.ThisDocument.Name)MsgBox (Application.ActiveDocument.Name)

二、函数定义

  1. vb用sub … end sub关键字定义函数,js用funtion{}关键字定义函数
Public(Private) Sub AddTemplate()
    MsgBox "d"
End Sub
function AddTemplate() {
    MsgBox("d"

三、数据类型

1. 指明类型

  • vb在数据定义时需要指明类型,但是js是动态类型,赋值后才有类型,js包括的基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol,声明这些类型都用关键字var
vbjs
Dim i As Integervar i

2. 基本类型对比

js类型vb类型
booleanBoolean
numberInteger,Long,LongLong,Single,Double
stringString

3.vb的bool类型首字母大写,js中都是小写

vbjs
True, Falsetrue, false

4.字符串

js字符串使用反斜杠“\”转义字符把特殊字符转换为字符串字符:

代码结果描述
单引号
""双引号
\\\反斜杠

因此,在常见的文件路径的场景,需要采用“/”或者“\”(Windows)来作为路径分隔符:

function test()
{
    Workbooks.Open("H:\\新建文件夹\\工作簿1.xlsx")
}

四、运算符

1. 算术运算符的差异,如vb中的mod关键字应改为%

vb:js:
Target.Row Mod 2 = 1(Target.Row)%2==1

2. “+”可以用来拼接字符串

AddIns.Add FileName:="C:\Program Files\Microsoft Office" _"\Templates\Letters Faxes\MyFax.dot", Install:=True
AddIns.Add("C:/Program Files/Microsoft Office" + "/Templates/Letters Faxes/MyFax.dot",true)

3. 逻辑运算符

vb
1.逻辑与(AND)2.逻辑或(OR) 3.逻辑非(<>)
js
逻辑与(&&)2.逻辑或(||) 3.逻辑非(!)

注意js和vb判断空的逻辑不一样,vb内部会智能一点,遇到判断空的语句,尽量用"!"

vbjs:
if Cells(1,2).value == “” //空if (Cells.Item(1,2).Value2) //空
vbjs
if Cells(1,2).value <> “” //非空if (!Cells.Item(1,2).Value2) //非空

五、枚举

vb和js枚举的使用上存在的差异如下,在vb中wdAlignParagraphLeft和WdParagraphAlignment.wdAlignParagraphLeft语法都正确,但在js中只有wdAlignParagraphLeft是正确用法

//vb用以上两种方式的枚举都可以正常使用
Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft
//js只支持这一种
Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft

六、With关键字

vb有with关键字,js没有该关键字,转换时可以将with后面的对象赋值给一个变量,例子如下

With Selection.Range.PageSetup.TextColumns
    .SetCount NumColumns:=2
    .EvenlySpaced = 0
End With
Var columens = Selection.Range.PageSetup.TextColumns
columens.SetCount(2)
columens.EvenlySpaced = 0
//注意TextColumns后面没有括号因为这是一个属性

七、 条件语句

  • VB中的常用条件语句{IF 条件 Then 表达式 Endif},
  • 在JS中应该转换为 if(条件) {表达式}
IF Target.Column>6 And Target.Column>37 And Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> ""
Then
    With Target.Validation
        .Delete
        .Add
Endif
if(Target.Column > 6 && Target.Column > 37 && Target.Row > 6 && (Target.Row) % 2 == 1 && Cells.Item(Target.Row -1n, 5).Value2 !== null) {
    var temptarget = Target.Validation
    temptarget.Delete()
    temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}

八、 路径

  • VB中的常用条件语句{IF 条件 Then 表达式 Endif}
  • 在JS中应该转换为 if(条件) {表达式}
IF Target.Column>6 And Target.Column>37 And Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> ""
Then
    With Target.Validation
        .Delete
        .Add
Endif
if(Target.Column > 6 && Target.Column > 37 && Target.Row > 6 && (Target.Row) % 2 == 1 && Cells.Item(Target.Row -1n, 5).Value2 !== null) {
    var temptarget = Target.Validation
    temptarget.Delete()
    temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值