首页 > 解决方案 > Google Apps 脚本根据 if 语句更新特定单元格

问题描述

目前,我的脚本正在使用“是”更新所选范围内的所有单元格,但我只希望它更新满足 if 条件的单元格。任何帮助将非常感激。

//Active spreadsheet var that can be used anywhere in the programme
var ss = SpreadsheetApp.getActiveSpreadsheet();

// Get and check if there is an email address
function checkSendEmailAdd () {

  //Getting the array of values 
  var activeSheet = ss.getActiveSheet();
  var emailCol = activeSheet.getRange(2, 9, activeSheet.getLastRow() - 1, 2).getValues();
//Looping over the array of values
      emailCol.forEach(function(val){
      var email = val[0].toLowerCase();
      var sentEmail = val[1];
      //If the send date column is empty and the email column has a @ within the string an email will be sent           
          if (email.indexOf("@") !== -1 && sentEmail == ""){

              //Email contents
              var subject = "Survey";
              var body = "Hi" + "<br><br>" +
                         "Testing 123";

               GmailApp.sendEmail(email, subject, "", { htmlBody: body } );

                //Update and set a new value in the sent email column
                var newSetValue = "YES";
                var updateSentEmail = activeSheet.getRange(2, 10, activeSheet.getLastRow() - 1, 1).setValue(newSetValue);

          } else {
          }
      });

我面临的问题是已发送列正在更新每个单元格,但我只希望它更新在电子邮件列中有电子邮件的单元格。

当前正在执行的图像

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


试试这种方式:

我试图从您的问题中确定列。我相信电子邮件是第一列,sentMail 是第二列,但如果我错了,您可以将它们更改为您需要的任何内容。

function sendEmail() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet0');
  var vA=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
  var sentA=sh.getRange(2,2,sh.getLastRow()-1,1).getValues();
  var html='';
  for(var i=0;i<vA.length;i++) {
    var email=vA[i][0].toString().trim().toLowerCase();
    var sentEmail=vA[i][1];
    if(email && email.indexOf("@")>-1 && !sentEmail){
      var subject = "Survey";
      var body = "Hi<br><br>Testing 123";

      //GmailApp.sendEmail(email, subject, "", { htmlBody: body } );
      html+=Utilities.formatString('<br />%s -<br />Email: %s<br />Subject: %s<br />Body: %s<br /><hr/>', Number(i+1),email,subject,body);
      sentA[i][0]="Yes";
    } 
  }
  sh.getRange(2,2,sh.getLastRow()-1,1).setValues(sentA);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Emails Sent');
}

发送前的电子表格:

在此处输入图像描述

发送后的电子表格:

在此处输入图像描述

我删除了 Gmail 行并使用对话框显示电子邮件:

在此处输入图像描述


推荐阅读