代码语言: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还是故意做这样的设计!