Речь идет об отправке электронной почты на основе изменений в листе - PullRequest
0 голосов
/ 14 января 2020

Я хочу, чтобы моя функция активировалась только на указанном c листе. Но я действительно не умею писать. У меня как 14 листов. И в любое время одно из значений листов изменяется. Он автоматически отправляет электронное письмо, которое я не хочу. Я хочу, чтобы моя функция отправляла электронную почту только на основе листа, который я хочу. (Я добавил триггер вручную в моем текущем проекте триггера).

function CheckbudgetAUD() {

  for(var i=2;i<1000; i++){
  var num1 = i;
  var r = 4;
  var department = "AUD";
  var transactionIDRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,14);
  var transactionID = transactionIDRange.getValue();
  var monthRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,12);
  var month = monthRange.getValue() ; 
  var costdescriptionRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,3);
  var costdescription = costdescriptionRange.getValue();
  var costRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,4);
  var cost = costRange.getValue();
  var actualbudgetRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,4); 
  var actualbudget = actualbudgetRange.getValue();
  var ApprovalRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,18);
  var Approval = ApprovalRange.getValue();
  var purposeRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,7);
  var purpose = purposeRange.getValue();
  var timeRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,1);
  var time = timeRange.getValue();
  var CEOsapprovalRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,19);
  var CEOsapproval = CEOsapprovalRange.getValue();
  var addinformationRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,5);
  var addi   = addinformationRange.getValue();
  var thisisdoneRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,30);
  var thisisdone = thisisdoneRange.getValue();
  var BlankRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,2);
  var Blank = BlankRange.getValue();

  //Emails Range
  var email1Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Forecasted budget").getRange("F18");
  var email1address = email1Range.getValue();
  var email2Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Forecasted budget").getRange("F21");
  var email2address = email2Range.getValue();
  var email3Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(department).getRange(num1,6);
  var email3address = email3Range.getValue();

  // Messages Range
  var message1 = "Your request has been " + Approval + "d." + "\n" + "\n" + "Transaction ID: " + transactionID;    
  var message = "For the " + month + ", " + department + "'s " + costdescription + ' budget exceeded the limit'+ '\n'+ '\n'+ "CURRENT BUDGET APPLICATION INFORMATION" + "\n" + "COST: "+ cost + '\n' + "Transaction ID: "+ transactionID +'\n' + "Cost item: " + costdescription + "\n" + "Purpose: "+ purpose + "\n" + "Department Name: " + department + "\n" + "Timestamp: " + time + "\n" + "additional information: " +  addi+ "\n" + 'Click the link below to approve'+ '\n' + 'https://docs.google.com/forms/d/e/1FAIpQLSduX3ol31Ddy3klEpynlO33wprEivAr-e9BL7fZ6Th-JQgjZA/viewform';     
  var subject = 'Exceeded the budget limit for current month';
  var subject1 = 'Form Approval/Decline';
   if ( Blank !== "" && thisisdone == "Apple"){
  MailApp.sendEmail(email3address, subject1, message1);        
    }

    //Over budget email
    if  ( Approval == "Decline" && thisisdone == "Apple"){
        if ( cost < 200000 ) {
            MailApp.sendEmail(email1address, subject, message);}
        else if ( cost >= 200000 ) {
    MailApp.sendEmail(email2address, subject, message);       
}
    }
  }
}

Я также в основном отправляю электронные письма 3 различным сторонам одновременно в одной функции. Просто к вашему сведению.

1 Ответ

0 голосов
/ 14 января 2020

Вы могли бы рассмотреть такой подход. Вы найдете, что это работает намного быстрее. Хотя, возможно, вы захотите внести некоторые исправления. Я заметил некоторое дублирование в назначениях диапазона, которые также отражены в моих назначениях. Помните, что номер столбца начинается с единицы, а индексы массива начинаются с нуля.

function CheckbudgetAUD() {
  var department = "AUD";
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(department)
  var fsh=ss.getSheetByName("Forcasted budget");
  var vA=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
  for(var i=0;i<vA.length; i++){
    var transactionID = vA[i][13];
    var month = vA[i][11]; 
    var costdescription = vA[i][2];
    var cost = vA[i][3];
    var actualbudget=vA[i][3];
    var Approval=vA[i][17];
    var purpose=vA[i][6];
    var time=vA[i][0];
    var CEOsapproval=vA[i][18];
    var addi=vA[i][4];
    var thisisdone=vA[i][29];
    var Blank=vA[i][1];
    var email1address = fsh.getRange("F18").getValue();
    var email2address = fsh.getRange("F21").getValue();
    var email3address = vA[i][5];
    var message1 = "Your request has been " + Approval + "d." + "\n" + "\n" + "Transaction ID: " + transactionID;    
    var message = "For the " + month + ", " + department + "'s " + costdescription + ' budget exceeded the limit'+ '\n'+ '\n'+ "CURRENT BUDGET APPLICATION INFORMATION" + "\n" + "COST: "+ cost + '\n' + "Transaction ID: "+ transactionID +'\n' + "Cost item: " + costdescription + "\n" + "Purpose: "+ purpose + "\n" + "Department Name: " + department + "\n" + "Timestamp: " + time + "\n" + "additional information: " +  addi+ "\n" + 'Click the link below to approve'+ '\n' + 'https://docs.google.com/forms/d/e/1FAIpQLSduX3ol31Ddy3klEpynlO33wprEivAr-e9BL7fZ6Th-JQgjZA/viewform';     
    var subject = 'Exceeded the budget limit for current month';
    var subject1 = 'Form Approval/Decline';
    if (Blank!=="" && thisisdone=="Apple"){
      MailApp.sendEmail(email3address, subject1, message1);        
    }
    if  (Approval=="Decline" && thisisdone=="Apple"){
      if (cost<200000) {
        MailApp.sendEmail(email1address, subject, message);
      }else if( cost >= 200000 ) {
        MailApp.sendEmail(email2address, subject, message);       
      }
    }
  }
}

Если вы пытаетесь запустить что-то подобное из onEdit (), тогда вы захотите ограничить, какие листы вы хотите это бежать дальше. Например, рассмотрим объект события как e тогда

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='AUD')return;

Это ограничит выполнение скрипта только для листа AUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...