我有一张表正在收集表格回复。然后,我使用QUERY函数将所有数据拉入单独的工作表中,使用以下公式:
=QUERY(formsubmissions,"SELECT *")
其中formsubmissions
在命名范围内。
一旦完成四个步骤,用户就会选择Completed =Ýes',这会触发以下脚本:
function onEdit() {
var sheetNameToWatch = "R+R;
var columnNumberToWatch = 15;
var valueToWatch = "Yes";
var sheetNameToMoveTheRowTo = "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());
}
}
此脚本正确执行和运行,将行移动到Çompleted
工作表并从活动工作表中删除。但是,该行只是暂时删除并几乎立即显示回来。我想这是因为它仍然匹配QUERY参数,所以它会立即再次拉入。
如何通过修改查询或修改脚本来确保它保持删除状态?
正如您所推测的那样,这是因为原始响应表中的行仍然符合查询条件。您可以修改查询以排除任何唯一标识符,方法是检查它是否已显示在“已完成”表单中 - 假设列A是参考编号或时间戳,您可以尝试以下操作:
=QUERY(formsubmissions,"SELECT * where A <> "&Completed!A:A)
然后,它会在Completed A:A中检查相同值的数组,并将其从查询结果中排除(如果存在)。