Search code examples
google-apps-scriptgoogle-sheetstriggers

Google App Script to trigger on cell value change


I am a newbie and have been using a simple App Script to send out emails with triggers onEdit and onChange. However, my Worksheet has over ten sheets and any edits/changes (done by me or by computations) in any of the sheets sends out an email, causing unintended spam! To avoid this, if I could use some code that sends the email based only on ANY CHANGE to a specific cell's value, in a specific sheet, my problem would be solved. My outgoing email message is short and the whole message is in just ONE cell (C2). If I can add a line of code which monitors for ANY change in that cell C2, and sends out an email if there is a change, that's it! I'd be done. My Script is as follows:

function sendEmail(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('Email');
var emailAddress = sheet1.getRange(2,1).getValue();
var subject = sheet1.getRange(2,2).getValue();
var message = sheet1.getRange(2,3).getValue();
MailApp.sendEmail(emailAddress, subject, message);
}

Solution

  • Answer:

    You can do this with an onEdit() and a conditional.

    Code Example:

    function onEdit(e) {
      const specificSheet = "Email"   // for example
      const specificCell = "C2"       // for example
    
      let sheetCheck = (e.range.getSheet().getName() == specificSheet)
      let cellCheck = (e.range.getA1Notation() == specificCell)
    
      if (!(sheetCheck && cellCheck)) {
        return
      }
      else {
        sendEmail()
      }
    }
    

    Rundown of this function:

    • Defines the sheet and A1 notation of the specific cell to check
    • Gets the Sheet and the A1 notation of the cell which was just edited
    • Returns if either the Sheet or the Cell are not the defined specific cell (using De Morgan's law)
    • Runs sendEmail() if the cell and Sheet are correct

    References: