Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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
Javascript 如何将onFormSubmit(e)和onEdit(e)嵌套在一起_Javascript_Google Apps Script_Google Sheets_Triggers_Javascript Scope - Fatal编程技术网

Javascript 如何将onFormSubmit(e)和onEdit(e)嵌套在一起

Javascript 如何将onFormSubmit(e)和onEdit(e)嵌套在一起,javascript,google-apps-script,google-sheets,triggers,javascript-scope,Javascript,Google Apps Script,Google Sheets,Triggers,Javascript Scope,我希望onFormSubmit(e)成为我的主要函数触发器,并在其中嵌套onEdit(e)。基本上,不管怎样,触发器将在FormSubmit上运行,但如果有任何编辑,它将在OneEdit中执行其他操作,如果没有,则它将执行其他操作 我看不懂,也看不懂怎么做 我的脚本触发器将onFormSubmit显示为唯一的函数,而onEdit不在下拉列表中 function onFormSubmit(e){ ScriptApp.newTrigger("onEdit").timeBased().afte

我希望onFormSubmit(e)成为我的主要函数触发器,并在其中嵌套onEdit(e)。基本上,不管怎样,触发器将在FormSubmit上运行,但如果有任何编辑,它将在OneEdit中执行其他操作,如果没有,则它将执行其他操作

我看不懂,也看不懂怎么做

我的脚本触发器将onFormSubmit显示为唯一的函数,而onEdit不在下拉列表中

function onFormSubmit(e){
    ScriptApp.newTrigger("onEdit").timeBased().after(60000).create();
  function onEdit(e){
    var ss = SpreadsheetApp.getActiveSpreadsheet().getRange('SpeedVSD');
    var sheet = ss.getSheetByName("Responses 1");
    var row = ss.range.getRow();
    var col = ss.range.getColumn();

    if (col >= ss.getColumn() && col <= ss.getLastColumn() && row >= ss.getRow() && row <= ss.getLastRow()){
      console.log("You edited a Cell within Range");

    }

  }

如果希望
onEdit()
始终运行,只需将其作为单独的函数创建即可。然后可以从
onFormSubmit()
调用它,如下所示:

function onFormSubmit(e){
   //does something you need...
   onEdit();
}
onEdit(e){
   //do the onEdit code...
}

唯一的问题是
onFormSubmit()
的事件
e
onEdit()
的事件不同,因此处理事件可能不是最好的方法。但是,从另一个函数调用一个函数就像调用任何其他函数一样有趣。

如果希望
onEdit()
始终运行,只需将其作为单独的函数创建即可。然后可以从
onFormSubmit()
调用它,如下所示:

function onFormSubmit(e){
   //does something you need...
   onEdit();
}
onEdit(e){
   //do the onEdit code...
}
function onFormSubmit(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheetByName('FIRST');
  var row = sheets.getLastRow();
  var myIDCol2 = 2;
  var myIDCol3 = 3;
  var myID2 = sheets.getRange(row, myIDCol2).getValue();
  var myID3 = sheets.getRange(row, myIDCol3).getValue();
  console.log("Speed Before Trigger Value: "+myID2);
  console.log("Voltage Before Trigger Value: "+myID3);
    ScriptApp.newTrigger("responsechange").timeBased().after(60000).create();

  }

function responsechange(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheetByName('FIRST');

  var row = sheets.getLastRow();
  var myIDCol2 = 2;
  var myIDCol3 = 3;
  /*for(var i = 1; i <= sheets.getLastColumn(); i++){

    console.log("Content of last Row: "+myID);
  }*/
   var myID2 = sheets.getRange(row, myIDCol2).getValue();
  var myID3 = sheets.getRange(row, myIDCol3).getValue();
  var template1 = HtmlService.createTemplateFromFile("speed1");
  var template2 = HtmlService.createTemplateFromFile("voltage");
  template1.speed1 = myID2;
  template2.voltage = myID3;
  console.log("Speed After Trigger Value: "+myID2);
  console.log("Voltage After Trigger Value: "+myID3);







  if((myID2 >=100) || (myID2 <= 50)){
    MailApp.sendEmail("someone@gmail.com","Out of Range Notification Speed","",{htmlBody: template1.evaluate().getContent()});
  }

  if((myID3 >=100) || (myID3 <= 50)){
    MailApp.sendEmail("someone@gmail.com","Out of Range Notification Voltage","",{htmlBody: template2.evaluate().getContent()});
  }

  }
唯一的问题是
onFormSubmit()
的事件
e
onEdit()
的事件不同,因此处理事件可能不是最好的方法。但是,从另一个函数调用一个函数就像调用任何其他函数一样有趣。

函数onFormSubmit(e){
function onFormSubmit(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheetByName('FIRST');
  var row = sheets.getLastRow();
  var myIDCol2 = 2;
  var myIDCol3 = 3;
  var myID2 = sheets.getRange(row, myIDCol2).getValue();
  var myID3 = sheets.getRange(row, myIDCol3).getValue();
  console.log("Speed Before Trigger Value: "+myID2);
  console.log("Voltage Before Trigger Value: "+myID3);
    ScriptApp.newTrigger("responsechange").timeBased().after(60000).create();

  }

function responsechange(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheetByName('FIRST');

  var row = sheets.getLastRow();
  var myIDCol2 = 2;
  var myIDCol3 = 3;
  /*for(var i = 1; i <= sheets.getLastColumn(); i++){

    console.log("Content of last Row: "+myID);
  }*/
   var myID2 = sheets.getRange(row, myIDCol2).getValue();
  var myID3 = sheets.getRange(row, myIDCol3).getValue();
  var template1 = HtmlService.createTemplateFromFile("speed1");
  var template2 = HtmlService.createTemplateFromFile("voltage");
  template1.speed1 = myID2;
  template2.voltage = myID3;
  console.log("Speed After Trigger Value: "+myID2);
  console.log("Voltage After Trigger Value: "+myID3);







  if((myID2 >=100) || (myID2 <= 50)){
    MailApp.sendEmail("someone@gmail.com","Out of Range Notification Speed","",{htmlBody: template1.evaluate().getContent()});
  }

  if((myID3 >=100) || (myID3 <= 50)){
    MailApp.sendEmail("someone@gmail.com","Out of Range Notification Voltage","",{htmlBody: template2.evaluate().getContent()});
  }

  }
var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheets=ss.getSheetByName('FIRST'); var row=sheets.getLastRow(); var myIDCol2=2; var myIDCol3=3; var myID2=sheets.getRange(行,myIDCol2.getValue(); var myID3=sheets.getRange(行,myIDCol3.getValue(); console.log(“触发值之前的速度:+myID2”); console.log(“触发值之前的电压:+myID3”); ScriptApp.newTrigger(“responsechange”).timeBased().after(60000.create(); } 函数响应更改(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheets=ss.getSheetByName('FIRST'); var row=sheets.getLastRow(); var myIDCol2=2; var myIDCol3=3; /*对于(var i=1;i=100)| |(myID2=100)| |(myID3
函数onFormSubmit(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheetByName('FIRST');
var row=sheets.getLastRow();
var myIDCol2=2;
var myIDCol3=3;
var myID2=sheets.getRange(行,myIDCol2.getValue();
var myID3=sheets.getRange(行,myIDCol3.getValue();
console.log(“触发值之前的速度:+myID2”);
console.log(“触发值之前的电压:+myID3”);
ScriptApp.newTrigger(“responsechange”).timeBased().after(60000.create();
}
函数响应更改(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheetByName('FIRST');
var row=sheets.getLastRow();
var myIDCol2=2;
var myIDCol3=3;

/*对于(var i=1;i=100)| |(myID2=100)| |(myID3)这个
onEdit
只是一个普通函数,对吗?它不会调用
函数onEdit(e)
的属性,对吧?我的
ss.range.getRow()
和ss.range.getColumn()没有定义“`我曾试图将
e
替换为
ss
,但仍然不起作用。我做得对吗?还是有什么遗漏了此
onEdit()
确实会与触发器一起工作,这意味着在对工作表进行编辑时会调用它,它是否使用
e
作为参数取决于您需要什么。至于未定义的,您试图从
ss.range.getRow();
ss.range.getColumn()中获取什么
?获取活动行和列,还是我使用了错误的语句?活动是什么意思,即已编辑的行和列?还是当前在工作表中选择的行和列?此
onEdit
只是一个普通函数,对吗?它不会调用
函数onEdit(e)的属性
对吗?我的
ss.range.getRow();
和ss.range.getColumn();“`我试图将
e
替换为
ss
,但仍然不起作用。我做得对吗?还是有什么地方我遗漏了此
onEdit()
确实会与触发器一起工作,这意味着在对工作表进行编辑时会调用它,它是否使用
e
作为参数取决于您需要什么。至于未定义的,您试图从
ss.range.getRow();
ss.range.getColumn()中获取什么
?获取活动行和列,还是我使用了错误的语句?活动是指编辑的行和列,还是当前在工作表中选择的行和列?