Google apps script 需要基于一个单元格删除整行';s标准
在Google Sheets中,当一行中的一个单元格包含短语“Delivered”时,我试图删除整行。onEdit功能无法满足我的需要,因为它要求我在工作前手动对工作表进行编辑,这不是我想要的。我需要它来自动[实时]删除行,因为单词“Delivered”是从一个实时web查询{=index(IMPORTXML}(如果您没有猜到的话)生成的 以下是在我意识到onEdit不是我所需要的东西之前,我使用onEdit得到的公式: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
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”周围加上引号在上面的第一个功能中,为了让时间触发器正确触发。谢谢大家的帮助。