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

时间:2019-07-31 20:21:33

标签: google-apps-script google-sheets google-sheets-formula

在Google表格中,当该行中的一个单元格包含短语“ Delivered”时,我试图删除整行。 onEdit函数无法满足我的需要,因为它要求我在工作表生效之前手动对其进行编辑-这不是我想要的。我需要它自动[实时]删除行,因为单词“ 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列中的“已交付”或“ I”一词删除整行。 onFormSubmit是否可以满足我的需求或onChange?如果是这样,我将如何构造公式?

1 个答案:

答案 0 :(得分:1)

尝试一下:

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;
}