Как объединить onFormSubmit (e) и onEdit (e) вместе
Я хочу, чтобы onFormSubmit (e) был моим основным триггером функции, и я хочу, чтобы onEdit (e) был вложенным. В принципе, независимо от того, триггер будет запускаться onFormSubmit, но он будет делать другие внутри onEdit, если есть какие-либо изменения, если их нет, он будет делать что-то еще.
Я не вижу, чтобы понять и заставить это работать.
Мои триггеры скрипта показывают 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");
}
}
изменить: удалось получить мое значение lastRow. Однако я все еще ищу команду, которая могла бы получить значение lastRow для всех столбцов, вместо того, чтобы делать это вручную.
изменить: используя FOR
Loop помогает сопоставить значения.
//This is to get the Last Row on Column 2 value.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheetByName('FIRST');
var row = sheets.getLastRow();
for(var i = 1; i <= sheets.getLastColumn(); i++){
var myID = sheets.getRange(row, i).getValue();
}
console.log("Row Number: "+row);
console.log("Content of last Row: "+myID);```
2 ответа
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()});
}
}
Благодаря этому мне удалось заставить его работать, когда при отправке формы, скажем, значения ниже 50 и выше 100, он запускает электронное письмо после триггера, основанного на времени. Я также пробовал использовать триггер, основанный на времени, я отредактировал значения, чтобы они находились в пределах диапазона, и он не отправил электронное письмо. Однако теперь единственная проблема заключается в том, что если триггеров много, он остановит триггер, сообщив, что у этого сценария слишком много триггеров. Перед добавлением дополнительных триггеров необходимо удалить из сценария.
Но с другой стороны, мне удалось получить последнее представленное значение, чтобы проверить, редактировалось оно или нет.
Если вы хотите onEdit()
чтобы запускаться всегда, вы просто создаете его как отдельную функцию. тогда вы можете вызвать его изonFormSubmit()
, нравится:
function onFormSubmit(e){
//does something you need...
onEdit();
}
onEdit(e){
//do the onEdit code...
}
Единственная проблема в том, что событие e
за onFormSubmit()
отличается от того, что для onEdit()
, поэтому работа с событиями может быть не лучшей идеей. Однако вызывать одну функцию из другой было бы интересно, как и с любой другой функцией.