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

时间:2015-01-09 15:54:46

标签: javascript arrays google-apps-script google-sheets

我在Google应用脚本中有一个二维数组,其中包含不同长度的数组。我想在电子表格中设置数组的值。但是,因为它内部的数组长度不同,所以我收到的错误基本上表示范围和数组高度不对齐。我已经列出了下面数组结构的一个例子。

如果我将空值添加到每个单独的数组,以便它们都匹配最长数组的长度,我可以使它工作。这似乎是一种解决方法。有没有其他方法可以设置二维数组的值?



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




2 个答案:

答案 0 :(得分:3)

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

如果你的行数很少,你可以做些什么?长度差异很大,就是设置它上面的每一行。

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

但这只是另一种解决方法。但是对你的数组进行处理以使所有长度匹配并执行单个setValues可能会表现得更好。

答案 1 :(得分:2)

如果您的真实阵列有很多行,那么单独写入会很昂贵。由于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);
}