WPS JS宏——数组Array对象

2022-12-01 11:38:33 浏览数 (1)

代码语言:javascript复制
操作系统:Linux version 4.4.131.D001.64.190906 (YHKYLIN-OS@Kylin)
WPS版本:WPS Office 2019 WPS表格(11.8.2.10533)

数组这种数据结构,应该在绝大多数语言都有实现,使用起来直接使用下标就可以获取想要的数据,在编程过程中几乎是必不可少的。

VBA中的数组只有很少的几个函数可以操作:

代码语言:javascript复制
Ubound  取数组的上标
Luound  取数组的下标
Filter  筛选一维数组
Join    将一维的String类型数组连接为1个字符串

Array  生成1个Variant类型的数组
IsArray  判断1个变量是否是数组
Erase  释放数组所占资源

VBA的数组功能比较的少,但是在JS中,数组也是一种对象,JS已经在这个对象上实现了很多的属性和方法,编程过程中直接调用即可,使用起来就方便了很多:

代码语言:javascript复制
join  和VBA中的一样,连接为字符串,不需要一定是String类型
push  添加元素到末尾
pop    从末尾删除元素,这2个方法不需要使用的人去关注数组是否越界,JS会帮忙处理好
unshift  添加元素到数组开头
shift  删除开头的数组
sort  对数组进行排序,可以自定义比较函数,用来确定排序的方式
reverse  反转数组
concat  连接另外1个数组构成新的数组
slice  创建子数组
…………

有这么多的方法仅仅是因为JS帮忙实现好了,可以简单理解为在VBA中,也可以自己去实现这些操作数组的函数,然后调用。

当然一般的使用者写的函数可能效率比较低,没有JS这种设计语言的人写的好。

在Excel中使用VBA或者JS,涉及数组这一块,单元格与数组之间的直接赋值,是非常的方便的。

在A1到B5单元格输入公式=ADDRESS(ROW(),COLUMN()),获取单元格地址,然后进行测试:

代码语言:javascript复制
function testRange2Array() {
 var arr = Range("A1:B5").Value2

 for (x in arr) {
  for (y in arr[x]) {
   Debug.Print("行"   x.toString()   " 列"   y.toString()   " value = "   arr[x][y])
  }
 }
}

用过VBA的应该都知道,这个输出应该是(VBA里数组获取单元格的数据后下标是从1开始,JS中是从0开始):

代码语言:javascript复制
行0 列0 value = $A$1
行0 列1 value = $B$1
行1 列0 value = $A$2
行1 列1 value = $B$2
行2 列0 value = $A$3
行2 列1 value = $B$3
行3 列0 value = $A$4
行3 列1 value = $B$4
行4 列0 value = $A$5
行4 列1 value = $B$5

可是在国产系统的WPS上,输出却是:

代码语言:javascript复制
行0 列0 value = $A$1
行0 列1 value = $A$2
行1 列0 value = $A$3
行1 列1 value = $A$4
行2 列0 value = $A$5
行2 列1 value = $B$1
行3 列0 value = $B$2
行3 列1 value = $B$3
行4 列0 value = $B$4
行4 列1 value = $B$5

这个和原来的习惯是完全不一样了,不知道是bug还是故意做这样的设计!

0 人点赞