Events 如何仅在有人添加新行时运行脚本 情况:

Events 如何仅在有人添加新行时运行脚本 情况:,events,google-apps-script,google-sheets,Events,Google Apps Script,Google Sheets,我有以下脚本,它在OnEdit中运行,但我想调整此脚本,使其仅在有人向工作表添加新行时运行 脚本: 如果可能,仅当有人在工作表末尾使用boton add include添加新行时才执行此脚本 致以最诚挚的问候,有一个特殊的触发器用于检测此类更改: 您甚至可以按照文档中的描述以编程方式创建它: var sheet = SpreadsheetApp.getActive(); ScriptApp.newTrigger("myFunction") .forSpreadsheet(sheet)

我有以下脚本,它在OnEdit中运行,但我想调整此脚本,使其仅在有人向工作表添加新行时运行

脚本: 如果可能,仅当有人在工作表末尾使用boton add include添加新行时才执行此脚本


致以最诚挚的问候,

有一个特殊的触发器用于检测此类更改:

您甚至可以按照文档中的描述以编程方式创建它:

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("myFunction")
   .forSpreadsheet(sheet)
   .onChange()
   .create();
然后是这样一个函数,它会在每次更改时被调用,它会查看行数,如果行数发生了更改,则会执行某些操作……如果更改是其他更改,则不会执行任何操作

您可以添加更多条件来处理其他情况,例如,在删除的id行中要做什么

function myFunction(){
  var numRows = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getMaxRows();
  if(ScriptProperties.getProperty('numberOfRows')){
    var nRows = Number(ScriptProperties.getProperty('numberOfRows'));
    if(nRows<numRows){
      //do something because rows have been added in this sheet
      ScriptProperties.setProperty('numberOfRows',numRows);// update value with current value
    }
  }
  ScriptProperties.setProperty('numberOfRows',numRows);// create a start value with current value of simply update if the trigger was called for another reason
}

您是否考虑过使用
onChange()
事件中参数
changeType
中可用的
INSERT\u ROW
。。。请随意发布另一个答案,您的想法更好,因为它使用了GAS direct方法。您好,当有人向工作表添加或插入新行时,我正在尝试将脚本集成到我的功能中,但不起作用。。。我不知道我需要把剧本放在哪里。。仍在工作..您必须在脚本编辑器中单独插入函数(即2个单独的函数),只需运行forst one一次即可创建触发器。之后,它将是全自动的。如果你想让它采取一些行动,调用第三个函数(你可能已经有了这个函数),我把“做点什么”放在这里,Serge,现在正在工作。。。OnChange()值存在于Resurce>Proyect触发器中。。。注意:当我使用createthetrigger部分时,系统会在同一个触发器上创建它10次
function myFunction(){
  var numRows = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getMaxRows();
  if(ScriptProperties.getProperty('numberOfRows')){
    var nRows = Number(ScriptProperties.getProperty('numberOfRows'));
    if(nRows<numRows){
      //do something because rows have been added in this sheet
      ScriptProperties.setProperty('numberOfRows',numRows);// update value with current value
    }
  }
  ScriptProperties.setProperty('numberOfRows',numRows);// create a start value with current value of simply update if the trigger was called for another reason
}
function initializeTrigger(){ // run this only once to create a trigger if necessary
  var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("myFunction")
   .forSpreadsheet(sheet)
   .onChange()
   .create();
}

function myFunction(e){
  Logger.log(e.changeType);
  if(e.changeType=='INSERT_ROW'){
    // do Something
    Browser.msgBox('New row(s) added');
  }
}