我已经在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])
}
我希望函数只复制一次表单的最后一行,而不是多次。
答案 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
}
}