需要根据一个单元格的条件删除整行

Need to delete an entire row based on one cell's criteria

在 Google 表格中,当该行中的一个单元格包含短语 "Delivered." 时,我试图删除整行 onEdit 函数无法满足我的需要,因为它需要我在 sheet 工作之前手动对其进行编辑 - 这不是我想要的。我需要它 [实时] 自动删除行,因为 "Delivered" 这个词是从实时网络查询 {=index(IMPORTXML} (如果您没有猜到的话,则为货运跟踪)生成的。

在我意识到这不是我需要的之前,这是我使用 onEdit 的公式:

function onEdit(event) { 
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var r = SpreadsheetApp.getActiveRange();

// getColumn with "Delivered" is currently set to column 9 or I.

  if(r.getColumn() == 9 &&  r.getValue() == "Delivered") {
    var row = r.getRow();
    s.deleteRow(row);
  }
}

该公式旨在根据第 9 列中的单词 "Delivered" 或 "I" 删除整行。 onFormSubmit 或 onChange 会满足我的需要吗?如果是这样,我将如何构建公式?

试试这个:

function createTimeBasedTriggerIfYouDontAlreadyHaveOne() {
  if(!isTrigger(deleteDeliveredRows)) {
     ScriptApp.newTrigger(deleteDeliveredRows).timeBased().everyDays(1).atHour(0).create();
  }
}

function deleteDeliveredRows() {
  var ss=SpreadsheetApp.openById('ssid')
  var sh=ss.getSheetByName('sheetname');
  var rowStart=2;//assume 1 row for headers
  var rg=sh.getRange(rowStart,1,sh.getLastRow()-rowStart+1,sh.getLastColumn());
  var vA=rg.getValues();
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(vA[i][8]=="Delivered") {
      sh.deleteRow(i + rowStart - d++);
    }
  }
}

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}