e.range.getA1Notation() unable to track changes caused by formula update

后端 未结 2 1235
名媛妹妹
名媛妹妹 2020-11-27 23:54

I modified a script provided from this blog

How to have your spreadsheet automatically send out an email when a cell value changes

After some debugging an mo

相关标签:
2条回答
  • 2020-11-28 00:41

    To avoid repeated notifications due to edits in other places, send an email only when the value you are tracking is different from the previous one. Store the previous value in script properties.

    function checkValue(e) {
      var sp = PropertiesService.getScriptProperties();
      var ss = SpreadsheetApp.getActive();
      var sheet = ss.getSheetByName("sheet1");
      var valueToCheck = sheet.getRange("C7").getValue();
      var oldValue = sp.getProperty("C7") || 0;
      if (valueToCheck > 100 && valueToCheck != oldValue) {
        MailApp.sendEmail("***v@gmail.com", "Campaign Balance", "Balance is currently at: " + valueToCheck+ ".");
        sp.setProperty("C7", valueToCheck);
      }
    }
    

    Here the email is sent only when valueToCheck differs from the stored value. If this happens, the stored value is updated by setProperty.

    0 讨论(0)
  • 2020-11-28 00:44

    onEdit(e) Trigger(Both simple and Installable) will not trigger unless a human explicitly edits the file. In your case, Your seem to be getting value from an external source (specifically, Google finance data).

    Script executions and API requests do not cause triggers to run. For example, calling FormResponse.submit() to submit a new form response does not cause the form's submit trigger to run.

    Script executions and API requests do not cause triggers to run. For example, calling Range.setValue() to edit a cell does not cause the spreadsheet's onEdit trigger to run.

    Also, for Google finance data,

    Historical data cannot be downloaded or accessed via the Sheets API or Apps Script. If you attempt to do so, you will see a #N/A error in place of the values in the corresponding cells of your spreadsheet.

    Notes:

    Having said that,

    • In cases where the change is made by a formula(like =IF(),=VLOOKUP()) other than auto-change formulas(like =GOOGLEFINANCE,=IMPORTRANGE,=IMPORTXML, etc), Usually a human would need to edit some other cell- In which case, You will be able to capture that event(Which caused a human edit) and make changes to the formula cell instead.

    • In cases where the change is done from sheets api, a installed onChange trigger may be able to capture the event.

    0 讨论(0)
提交回复
热议问题