Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 需要基于一个单元格删除整行';s标准_Google Apps Script_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google apps script 需要基于一个单元格删除整行';s标准

Google apps script 需要基于一个单元格删除整行';s标准,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,在Google Sheets中,当一行中的一个单元格包含短语“Delivered”时,我试图删除整行。onEdit功能无法满足我的需要,因为它要求我在工作前手动对工作表进行编辑,这不是我想要的。我需要它来自动[实时]删除行,因为单词“Delivered”是从一个实时web查询{=index(IMPORTXML}(如果您没有猜到的话)生成的 以下是在我意识到onEdit不是我所需要的东西之前,我使用onEdit得到的公式: function onEdit(event) { var s = S

在Google Sheets中,当一行中的一个单元格包含短语“Delivered”时,我试图删除整行。onEdit功能无法满足我的需要,因为它要求我在工作前手动对工作表进行编辑,这不是我想要的。我需要它来自动[实时]删除行,因为单词“Delivered”是从一个实时web查询{=index(IMPORTXML}(如果您没有猜到的话)生成的

以下是在我意识到onEdit不是我所需要的东西之前,我使用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 work for my needs,还是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;
}
函数createTimeBasedTriggerIoudontalReadyHaveOne(){
如果(!isTrigger(deleteDeliveredRows)){
ScriptApp.newRigger(deleteDeliveredRows).timeBased().everyDays(1).atHour(0).create();
}
}
函数deleteDeliveredRows(){
var ss=SpreadsheetApp.openById('ssid'))
var sh=ss.getSheetByName('sheetname');
var rowStart=2;//假设标题为1行
var rg=sh.getRange(rowStart,1,sh.getLastRow()-rowStart+1,sh.getLastColumn());
var vA=rg.getValues();
var d=0;

对于(var i=0;iMy 2美分:如果您的业务逻辑是删除已完成的条目(?),那么更新过程本身就应该这样做,如果可能的话。当您说“实时web查询”时,您使用什么将其记录在工作表中?=索引(importXml由于您使用公式来更新数据,您最好设置一个函数,在基于时间的触发器上循环整个工作表。我该怎么做呢?Cooper,这个脚本工作得很好!我不得不在“deleteDeliveredRows”周围加上引号在上面的第一个功能中,为了让时间触发器正确触发。谢谢大家的帮助。