在日常工作中,由于WPS的JS宏资料较少,现对使用过程中遇到的问题进行总结,并作为个人资料保存。
一、WPS的JSA介绍
从 WPS 2021 版本开始,WPS 正式支持使用 JS 作为宏语言,官方简称JSA,即JS for Application的缩写。根据官方文档介绍,WPS 内嵌了一个 V8 引擎的 JavaScript,支持大部分 ES6 语法,同时支持JavaScript标准内置对象,但不支持浏览器的内置对象。
二、编制代码中的注意事项
(一)判断单元格为空的方法
在VBA中判断单元格是否为空的代码如下:
If ActiveSheet.Cells(1, 1) = "" Then ....End If
JS宏可用以下四种方式之一代替:
- If(ActiveSheet.Cells(1,1).Text==''){...}
- If(ActiveSheet.Cells(1,1).Text.length==0){...}
- If(ActiveSheet.Cells(1,1).Value2 == null){...}
- If(ActiveSheet.Cells(1,1).Value()==null){...}
(二)带格式复制:
在拷贝以0开头的数字串时,如用Cells(2,1).Value2 = Cells(1, 1).Value2,则数字串自动转换为number类型,将丢弃数字串开头的0。可使用Cells(2,1).Value2 = Cells(1, 1)进行字符串复制,复制后的单元格为字符串类型,将保留数字串开头的O。
(三)单元格Value2属性和Text属性的区别
Value2是实际的值,Text是显示的值。例如,某单元格的实际值为3.1415,将该单元格设置为保留2位小数,则该单元格的Value2为3.1415,该单元格的Text为3.14。
(四)取整计算
在VBA中, CINT和ROUND 函数为四舍五入取整,ROUNDUP函数为向上取整,Int和Fix函数为向下取整。
在JS中,可用Math类的方法进行取整,其中,Math.round函数为四舍五入取整;Math.ceil()为向上取整;Math.floor()为向下取整。也可用parseInt()进行向下取整。
(五)浮点数计算差异
VBA宏和JS宏在进行浮点数运算时,运算结果会有微小的差异。如果用两种宏的运算结果进行比对,可能会出现不相等的情况。建议截取小数点后相同位数后进行比对。