Google电子表格中的事件值和偏移量

时间:2014-10-21 17:46:06

标签: google-apps-script google-sheets google-form

@Mogsdad在另一个问题上给了我极大的帮助:

Copy last row to another spreadsheet upon form submission

function copyLastRow(event) {  
  var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1');
  target.appendRow(event.values);
}

此脚本非常有效 - 它将原始源中最后添加的行与表单响应复制到另一个电子表格。它复制了表单中的所有值,但在原始电子表格中有响应,我有一个额外的列,它不是提交表单的一部分。我也需要从这个专栏中复制数据。 我收到了Mogsdad的回复,该回复说事件对象包含已更新的范围,因此我应该使用偏移来获取其他单元格。 我到处搜索有事件值和偏移量的任何例子,但没找到任何东西。我非常感谢任何帮助,因为我没有太多的经验。感谢。

1 个答案:

答案 0 :(得分:2)

Event对象包含一个range属性,告诉我们在工作表中放置了最新的表单响应。 Class Range的所有方法都可以应用于此范围。例如,.getWidth()将返回范围宽度,为扩展要复制的范围提供了一个起点。

由于我们希望从响应中获取单元格以及工作表中的一个(或多个)附加列,因此我们可以使用offset()方法扩展原始范围。 (请注意,offset()是范围方法 - 它不适用于event.values数组。)

function copyLastRow(event) {  
  var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1');
  var sourceWidth = event.range.getWidth() + additionalColumns; // define a value here
  // Grab all the cells in this response, plus additionalColumns
  var sourceRange = event.range.offset(0,0,1,sourceWidth);
  target.appendRow(sourceRange.getValues()[0]);
}

请注意,因为我们使用事件对象中的信息,所以此函数仍然可以容忍多个表单提交。