【问题标题】:Send email notification using multiple sheet tabs when a cell value change当单元格值更改时,使用多个工作表选项卡发送电子邮件通知
【发布时间】:2021-05-10 02:58:22
【问题描述】:

下面的函数效果很好,但我想添加具有相同列数和行数的第二张表。当用户在第 7 列中选择“是”时,逻辑是相同的。如果用户在 Sheet2 中选择“是”,我如何发送电子邮件。我确实创建了重复的函数和名称表作为“Sheet2”。当我在 Sheet2 中单击“是”时,即使 Sheet1 未选择“是”,我也会收到有关 Sheet1 和 Sheet2 的电子邮件通知。如果用户在 Sheet1 中选择“是”,它应该只从 Sheet1 和 Sheet2 中获取电子邮件。我该怎么办?

function sendNotification(e){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName('Sheet1');
   var editedRange = e.range;
   if(sheet.getName()=='Sheet1' && editedRange.getColumn()==7 && e.value=='Yes'){
        var row = editedRange.getRow();
        var numRows = sheet.getLastRow()-1;
        var row_values = sheet.getRange(row, 1, numRows, 7).getValues()[0];
        var first_name = row_values[0];
        var last_name = row_values[1];
        var company = row_values[3];
        var email= row_values[5];
        var message = "The person has completed Sheet1"+first_name+" "+last_name+ " - 
                      "+company;
        var subject = "Completed - "+first_name+" "+last_name;

 MailApp.sendEmail(email, subject, message);
 }
}

【问题讨论】:

    标签: google-apps-script google-sheets triggers


    【解决方案1】:

    替换

    var sheet = ss.getSheetByName('Sheet1');
    

    通过

    var sheet = e.range.getSheet();
    

    替换

    if(sheet.getName()=='Sheet1' && editedRange.getColumn()==7 && e.value=='Yes'){
    

    通过

    if(['Sheet1', 'Sheet2'].indexOf(sheet.getName()) > -1 && editedRange.getColumn()==7 && e.value=='Yes'){
    

    如果sheet.getName() 分别返回'Sheet1''Sheet2'['Sheet1', 'Sheet2'].indexOf(sheet.getName()) 将返回01,在任何其他情况下返回-1

    注意:您可以删除var ss = SpreadsheetApp.getActiveSpreadsheet();

    【讨论】:

    • 谢谢鲁本!它在 Sheet2 上运行良好,但如果我在 Sheet1 中选择是,我会收到来自 Sheet2 的电子邮件通知。如果选择是,则不会从 Sheet1 收到任何通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多