Google脚本与QUERY函数冲突的问题

时间:2019-02-15 00:15:31

标签: google-sheets google-sheets-formula google-sheets-query

我有一张纸正在收集表格答复。然后,我使用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参数匹配,因此立即将其再次拉入。

如何通过修改查询或修改脚本确保它保持删除状态?

1 个答案:

答案 0 :(得分:0)

如您所料,发生这种情况是因为原始响应表中的行仍满足查询条件。您可以通过检查查询是否未显示在“已完成”工作表中来修改查询以排除任何唯一标识符-假设A列是参考数字或时间戳,则可以尝试以下操作:

public function collections()
{
    return $this->belongsToMany(Collection::class, 'collection_products', 'product_id', 'collection_id');
}

然后,它检查Completed A:A中的数组是否具有相同的值,并将其从查询结果中排除(如果存在)。