不需要的多行条目/副本(Google表格-> Google表格文件,sheet1-> Google表格文件,表格2)

时间:2019-04-07 14:40:36

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

我已经在GSheet中编写了一个应用脚本,用于:

  1. 如果Google表单收到新条目(触发),则将Google表单工作表的最后一行复制到Google表单文件中
  2. 将此行粘贴到同一GSheet文件中的另一张工作表的最后一行

不幸的是,它多次将表格的最后一行复制到相应的表格中。有时是两次,有时是四次。我看不到代码中的错误。

到目前为止,我找不到解决方案。我在appendRow之前包含了一个Utilities.sleep(5000)暂停,但是没有效果。

function myFunction() {

// Source sheet: Form is the source sheet of the Google Form
var source = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form");

// Get last row in Form
var lastrow = source.getLastRow();

// Get just the date of the Form input 
var formdate = source.getRange(lastrow,7,1,7).getValue();

// Change month number to string (e.g. April)
var currentD2 = Utilities.formatDate(formdate, 
Session.getScriptTimeZone(), "MMMMM");

// Identify target sheet in same Google sheet file
var target = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(currentD2);

// Identify the appropriate range of the last row of the Form sheet 
// (source) 
var sourceData = source.getRange(lastrow, 2,1,8).getValues();

// Append the last row of the Form sheet to the last row in the target 
// sheet
target.appendRow(sourceData[0])
}

我希望函数只复制一次表单的最后一行,而不是多次。

1 个答案:

答案 0 :(得分:0)

您好,我想您正在使用onEdit触发器来启动功能。

这意味着,当您更改“ Google表单”时,它将触发您的功能,该功能将更改同一电子表格中的另一个工作表,从而再次触发。

我建议将函数重命名为onEdit(e) ref(https://developers.google.com/apps-script/guides/triggers/events

,然后使用以下条件来限制您的操作:如果e.range属于您的“ Google表单”,则应做其他事情。

function onEdit(e) {
  if (e.range.getSheet().getName()='your google form sheet') {
   // insert here the contents of your function

  }
}