别再死守 VBA 了!WPS JS 宏(JSA)迁移全攻略:避坑与进阶指南



Lv.1新人创作者
嘿!大家好,我是小编 E精精!
最近给公司做的模板,由于数据突破了300列+8000行,公式卡的崩溃,于是决定改造一下,考虑到公司大部分同事都是WPS,使用VBA还需要按照插件等,考虑兼容性选择了WPS的JS宏处理,下面就一些踩的坑给大家聊一聊,希望对你有帮助!
▍了解WPS-JS宏
WPS-JS宏,我们也称为JSA对应的是VBA,使用的JS语言书写,但是基本保留了office对应的模型,对象模型和VBA大同小异,比如Workbooks、Sheets、Range等!
目前JSA已经支持到ES6,大部分现代语法,让JSA在代码实现方便比古老的VBA更加便捷和简洁!
如果你想从VBA顺利迁移到JSA,我会分享一点踩过的坑,需要牢记!
▍语法习惯的彻底改变
这是最直观的冲击。你需要从习惯的 Sub...End Sub 切换到 JS 的大括号({})语法体系
下面简单总结一下,具体可以学习一下JS基础知识!
①花括号语法
具体请看下图,我们使用function 函数名称{},大括号内书写逻辑,一般JS 建议在每行末尾加上分号 ;
② 申明变量语法变化
图中,我们也能看出,变量的申明也由VBA的 Dim变成了 let,具体还有两个,共3种
let:声明局部变量(推荐)。const:声明常量。var:旧式声明③注释变化
VBA中我们使用单引号或者REM注释,在JSA中,我们使用
//注释内容/*多行内容注释*/还有你可能也发现了,我们拼接字符不是用的&,而是加(+),这些也是一些细节变化!通过这个小案例,我们先了解一些,更多可以自己书写再深入!
下面我们再讲解一下对象处理方面的变化!
▍对象调用方面的变化
在 VBA 中,属性和方法的界限有时比较模糊。但在 JSA 中,方法必须带括号。
比如我们在VBA中,选择A1单元格直接使用Range("A1").Select 也是OK的,但是在JS中必须加上括号!不加括号,本质是返回一个函数,添加括号才会执行,这一点非常容易忘记,导致最后没有执行,刚开始转换,特别容易犯错!
添加上括号,执行后,A1单元格会被选中,同时返回true!
其中需要注意JSA大小写敏感,Range写成range直接报错,无法执行!
所以在书写的时候,还要记住大小写哈!
其中有一个特别需要强调且常用的就是VBA中的单元格值属性是默认的,很多时候Value可以不写,但是在JSA中Value是一个方法,必须写且必须添加括号执行!
▍数组起飞
VBA 的数组属性和方法非常有限,操作起来也是一言难尽。JSA 使用的是标准的 JS 数组,功能极其强大,属性和方法非常丰富!
在JSA中简单跑了一下,基本有36个左右!比如常见的 .map(), .filter(), .forEach(), .reduce()等!
还有数组的下标问题,很多时候JS的都是从0开始的,这点和VBA中不同,具体情况,还是推荐大小小测试并总结记忆!
还有很多细节变化,有时间我们再细节!早前写过一系列的JSA教程,有时间可能还需要补充一下实战案例和模板,毕竟实战中真的好用,不用考虑对面是否支持VBA问题了,同事真的大部分WPS……
今天的内容就到这里,更多办公自动化知识,欢迎关注小编,小编也在探索最新的AI办公自动化额!
Lv.2潜力创作者
Lv.2潜力创作者