将 setValues() 与不同长度的数组一起使用

Using setValues() with arrays of different lengths

我在 Google 应用程序脚本中有一个二维数组,其中包含不同长度的数组。我想在电子表格中设置数组的值。但是,由于其中的数组长度不同,我收到一条错误消息,基本上说范围和数组高度不对齐。我在下面列出了数组结构的示例。

如果我向每个单独的数组添加空值,使它们都与最长数组的长度相匹配,我就能让它工作。不过,这似乎是一种解决方法。还有另一种方法可以设置二维数组的值吗?

var array = [
  [a],
  [b,c],
  [d,e],
  [],
  [f,g,h,i],
  [],
  [j,k],
  ]

不,你不能。尺寸必须匹配。

如果你有几个 "rows" 并且长度差异很大,你可以做的是单独设置每一行。

for( var i = 0; i < array.length; ++i )
  sheet.getRange(i+1, 1, 1, array[i].length).setValues([array[i]]);

但这只是另一种解决方法。但是在你的阵列上工作以使所有长度匹配并做一个 setValues 可能会表现得更好。

如果您的实际数组有很多行,则单独写入会很昂贵。由于 js 处理数组的方式,重新标注每个行数组非常简单。与我使用的模式类似的模式是:

function myFunction() {
 var array = [
  [1],
  [2,2],
  [3,5],
  [],
  [0,0,0,0],
  [],
  [0,0],
 ];

 // get length of the longest row
 var max = array
  .slice(0)
  .sort(function (a,b) {
    return ( (a.length !== b.length) ? 1 : 0 );
  })[0].length;

 // arrays are zero indexed
 var maxi = max-1;

 // insert a pointer at max index if none exists
 array = array
  .map(function (a){ 
    a[maxi] = a[maxi] || ""; 
    return a; 
  });

 Logger.log(array);
}