更改Google电子表格中的数据

时间:2013-12-03 04:25:59

标签: google-apps-script google-sheets

我正在更改Google电子表格中的一些数据单元格。我想将数据写回电子表格。我遇到的问题是表单有5列,当我将新数据添加到其中一个单元格中时,我希望备份该行中下一个空闲单元格中的旧数据。当我这样做时,我无法回写数据。这是我的代码。

var sheet = SpreadsheetApp.openByUrl("URL");
  var d = sheet.getSheetByName('Form Responses').getDataRange().getValues();
  var head = sheet.getSheetByName('Form Responses').getRange(1,1,1,sheet.getLastColumn()).getValues()[0];

  d[29][2] = "A";
  d[29][3] = "B";
  d[29][4] = "C";
  d[29][5] = "D";
  sheet.getSheetByName('Form Responses').getRange(1,1,d.length,d[0].length).setValues(d);

这是我得到的错误。 Incorrect range width, was 6 but should be 5

我也尝试将回写语句修改为

sheet.getSheetByName('Form Responses').getRange(29,1,1,d[29].length).setValues(d[29]);

在这种情况下,我得到Cannot convert Array to Object[][].

回写数据的正确方法是什么。我最好只想回写该特定行的数据,而不是整个工作表数据。

1 个答案:

答案 0 :(得分:1)

这里的问题是你只修改数组中的一个“行”,以便最后它不再是“symetric”(即每行不具有相同的长度)并导致你得到的错误。

可能的解决方案:

可能有多种避免该错误的好方法,您可以使用新数据(相同高度)创建第二个数组,并在写回工作表之前连接数组,或者如下例所示添加单元格(或许多单元格)在为循环分配新值之前,循环中的每一行。根据数组的大小,可以比另一个更好和/或更容易实现......这是一个应该有效的简化示例:

  for(var n=0;n<d.length;n++){
    d[n].push('');
    Logger.log('row '+n+' = '+d[n]+'\n');// see the result
  }

编辑以下评论:

如果您只更改一行,则可以写一行,只需将代码更改为

即可
sheet.getSheetByName('Form Responses').getRange(29,1,1,d[29].length).setValues([d[29]])

这与您尝试过的距离不远,但您只是缺少一对括号来获取setValues()所需的2D数组