脚本编辑器不适用于 Google 表单响应 Sheet

Script editor is not applying to Google Form Response Sheet

我正在使用下面的脚本在编辑单元格时将行移动到其他 sheets。我还需要应用此脚本来处理 google 表单响应 sheet。我在表单响应 sheet 上创建了一个新列,当标记为 "Yes" 时,我需要将该行移动到工作簿中的另一个 sheet。 google 表单响应 sheet 与正常的 sheet 不同吗?该脚本适用于所有其他 sheets。

function onEdit() {
var sheetNameToWatch = "New Listings";
var columnNumberToWatch = 52;
var valueToWatch = "Yes";
var sheetNameToMoveTheRowTo = "New Listings Completed";

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();

if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {

var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1,sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}

如果您修改代码以使用 copyTo 而不是 moveTo,它会给出预期的行为。

sheet.getRange(range.getRow(), 1, 1,sheet.getLastColumn()).copyTo(targetRange);

修改后的代码:

function onEdit() {
var sheetNameToWatch = "New Listings";
var columnNumberToWatch = 52;
var valueToWatch = "Yes";
var sheetNameToMoveTheRowTo = "New Listings Completed";

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();

if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {

var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1,sheet.getLastColumn()).copyTo(targetRange);
sheet.deleteRow(range.getRow());
}
}

如您所料,其原因很可能是响应 sheet 是独一无二的 sheet。此外,如果您查看执行记录,它会给出如下错误:

[17-04-04 21:51:56:645 CDT] Execution failed: Cannot cut from form data. Use copy instead. (line 123, file "SOhelp2") [0.405 seconds total runtime]

希望对您有所帮助!