Excel Office Script 构造2D数组调用setValues()报错问题咨询
问题原因
- 引用类型复用错误:
testArray是数组(引用类型),你在循环外声明后全程复用同一个内存地址,每次执行testArray.length = 0修改的是同一个数组的内容,arrayFinal.push(testArray)实际是把同一个引用多次存入结果数组,最终所有位置的值都会同步为最后一次操作后的testArray内容。 - 无关元素被插入:循环中没有判断x是否符合筛选条件就直接执行
arrayFinal.push(testArray),不符合长度要求的元素对应位置也会被插入空的testArray,最终结果长度和原数组一致,而非符合筛选条件的元素个数。 - 嵌套层级冗余:你需要的最终结构是每个子元素为
[符合条件的一维数组],不需要额外维护全局的testArray变量做中转。
修复后的代码
let myArray: number[][] = [[1, 2, 3], [2, 4], [5, 6, 7],[1],[2,3],[1,5,7]]; // 先筛选长度>2的元素,再给每个元素套一层数组适配setValues要求 const arrayFinal = myArray.filter(x => x.length > 2).map(x => [x]); console.log(JSON.stringify(arrayFinal))
输出结果
输出为[[[1,2,3]],[[5,6,7]],[[1,5,7]]],符合Office Script中setValues()方法要求的二维数组结构,可以直接调用写入对应单元格区域。
内容的提问来源于stack exchange,提问作者user13746257
相关产品推荐
相关产品推荐

