谷歌应用程序脚本 - 在工作表上批量setValues()

时间:2015-06-13 14:57:15

标签: google-apps-script scripting google-apps

为了优化我的代码,我正在尝试进行批量更新。我不想在循环上调用setValues(),而是将数据存储在数组中,然后在循环后执行一次setValues()。但是,我无法使其发挥作用:

var tempValuesArr= [];
var ctr = 0;

for ....{

  //there is only one row needed for every second sheet, get the data at the 2nd 
  //row with 6 columns
  var secondSheetRange = secondSheet.getRange(2, 1, 1, 6);  
  tempValuesArr.push(secondSheetRange.getValues());
  ctr++;
}

//finally, copy these tempValues at another sheet, starting at second row
var anotherSheetRange = anotherSheet.getRange(2, 1, ctr, 6);
anotherSheetRange .setValues(tempValuesArr);  

这是我得到的错误:

  

范围宽度不正确,为1,但应为6

谢谢!

2 个答案:

答案 0 :(得分:1)

tempValuesArr.push(secondSheetRange.getValues()[0]);

secondSheetRange.getValues()返回一个二维数组,其中只需要一个行数组

答案 1 :(得分:1)

我认为问题在于你将二维数组([[CellA2, CellB2], [CellA3, CellB3]])推入一个1d数组([]),留下一个3d数组([[[CellA2, CellB2], [CellA3, CellB3]]])。

要使用setvalues,您需要一个2d([[CellA2, CellB2], [CellA3, CellB3]] - 2行OR [[CellA2, CellB2]] - 1行)值数组。

试试这个,它只会将第一个1d数组([CellA2, CellB2, CellC2])从该范围推送到您在开始时创建的空数组中。更多信息Here

tempValuesArr.push(secondSheetRange.getValues()[0])