Javascript 检查要通知的用户的电子邮件警报脚本-Google AppScript

Javascript 检查要通知的用户的电子邮件警报脚本-Google AppScript,javascript,loops,google-apps-script,Javascript,Loops,Google Apps Script,我在这个论坛上发现了很多有用的东西。一般来说,我对GAS和JS编码还不熟悉,我无法找到一种方法来解决一些我确信是NBD的问题 我先附上代码: function emailAlert() { // today's date information var today = new Date(); var todayMonth = today.getMonth() + 1; var todayDay = today.getDate(); var todayYear = t

我在这个论坛上发现了很多有用的东西。一般来说,我对GAS和JS编码还不熟悉,我无法找到一种方法来解决一些我确信是NBD的问题

我先附上代码:

function emailAlert() { 
   
  // today's date information
  var today = new Date();
  var todayMonth = today.getMonth() + 1;
  var todayDay = today.getDate();
  var todayYear = today.getFullYear();

  // getting data from spreadsheet
  var url = SpreadsheetApp.getActiveSpreadsheet().getUrl();
  var sheet = SpreadsheetApp.openByUrl(url).getSheetByName("Assignments");
  var resultssn = SpreadsheetApp.openByUrl(url).getName();

//Emails addresses
  var emailJonDoe = "example@example.com"
  var emailEmilyDoe = "example@example.com"
  
  var duedatesRange = sheet.getRange("H5:H9");  
  var duedates = duedatesRange.getValues();
  var actionitRange = sheet.getRange("C5:C9"); 
  var actionit = actionitRange.getValues();
  var prjsRange = sheet.getRange("B5:B9"); 
  var prjs = prjsRange.getValues();
  var whosRange = sheet.getRange("D5:D9"); 
  var whos = actionitRange.getValues();


  //looping through all of the rows
  for (var i = 0; i < duedates.length; ++i) {
    var row = duedates[i];
    
  for (var i = 0; i < actionit.length; ++i) {  
    var assignmenttext = actionit[i];
    
  for (var i = 0; i < prjs.length; ++i) {     
    var project = prjs[i];
  
  for (var i = 0; i < whos.length; ++i) {      
    var user = whos[i];

    var expireDateFormat = Utilities.formatDate(
      new Date(row[i]),
      'ET',
      'MM/dd/yyyy'
    );

    // email information
    var subject = '';
    var message =
      " One of your action items is due today. " +
      '\n' +
      '\n' +
      ' Project: ' +
      project[i] +
      '\n' +
      '\n' +
      ' Action Item: ' +
      assignmenttext[i] +
      '\n' + 
      '\n' +
      'Check the Tracker now !!' + 
      '\n' +
      url;

    //expiration date information
    var expireDateMonth = new Date(row[i]).getMonth() + 1;
    var expireDateDay = new Date(row[i]).getDate();
    Logger.log("Expire date is:" + expireDateDay);

    //check for JD and send email to him if true
    if (
      user[i] === "JD" &&
      expireDateMonth === todayMonth &&
      expireDateDay === todayDay
    ) {
      var subject =
        'FEG AAAAAAManagement - An action item is due today!! : ' + assignmenttext[i];
      MailApp.sendEmail(emailJonDoe, subject, message);
      Logger.log('todayyyy!');
    }
    
    //check for ED and send email to him if true
    if (
      user[i] === "ED" &&
      expireDateMonth === todayMonth &&
      expireDateDay === todayDay
    ) {
      var subject =
        'FEG DDDDDManagement - An action item is due today!! : ' + assignmenttext[i];
      MailApp.sendEmail(emailEmilyDoe, subject, message);
      Logger.log('todayyyy!');
    }
    }
 }
 }
}
}
函数emailAlert(){
//今天的日期信息
var today=新日期();
var todaymount=today.getMonth()+1;
var todayDay=today.getDate();
var todayYear=today.getFullYear();
//从电子表格中获取数据
var url=SpreadsheetApp.getActiveSpreadsheet().getUrl();
var sheet=SpreadsheetApp.openByUrl(url).getSheetByName(“分配”);
var resultssn=SpreadsheetApp.openByUrl(url.getName();
//电子邮件地址
var emailJonDoe=”example@example.com"
var emailydoe=”example@example.com"
var duedatesRange=sheet.getRange(“H5:H9”);
var duedates=duedatesRange.getValues();
var actionitRange=sheet.getRange(“C5:C9”);
var actionit=actionitRange.getValues();
var prjsRange=sheet.getRange(“B5:B9”);
var prjs=prjsRange.getValues();
var whosRange=sheet.getRange(“D5:D9”);
var whos=actionitRange.getValues();
//在所有行中循环
对于(变量i=0;i

这是一个简单的代码片段,它为H列中包含今天日期的每一行发送电子邮件

我有一个类似的已经在工作,但我想实现“用户”功能。 长话短说,我希望代码:

  • 检查H列中包含今天日期的每一行
  • 对于上面的每一行,检查D列中相应单元格的内容。 如果包含京东,则向京东的电子邮件发送电子邮件警报。如果它包含ED,请向ED的电子邮件发送电子邮件警报
  • 电子邮件应包含行中C列(assignmenttext)和B列(project)的相应单元格
  • 顺便说一句,这段代码在服务器端并不太重,因为我在开始时只使用了“getRange”,并且大部分代码都在客户端运行(这是正确的吗?)

    我不确定在这种情况下使用哪个循环函数,以及如何用我的代码实现它


    我愿意接受任何意见或建议。提前感谢任何愿意花时间帮助我的人。(:

    这可以使用单个for循环完成,检查每行中的数据:

    function sendEmail() {
       
      // today's date information
      var today = new Date();
      var todayMonth = today.getMonth() + 1;
      var todayDay = today.getDate();
      var todayYear = today.getFullYear();
      Logger.log(todayDay);
    
      // getting data from spreadsheet
      var url = SpreadsheetApp.getActiveSpreadsheet().getUrl();
      var sheet = SpreadsheetApp.openByUrl(url).getSheetByName("Assignments");
      var resultssn = SpreadsheetApp.openByUrl(url).getName();
    
      //Emails addresses
      var emailJonDoe = "example@example.com"
      var emailEmilyDoe = "example@example.com"
      
      var lastRow = sheet.getLastRow();
      var dataRange = sheet.getRange(2,1,lastRow,8).getValues();
    
      //looping through all of the rows
      for (var i = 0; i < lastRow-1; i++) {
        var project = dataRange[i][1];
        var assignmenttext = dataRange[i][2];
        var user = dataRange[i][3];
        var row = dataRange[i][7]; 
        
        //expiration date information
        var expireDateFormat = Utilities.formatDate(new Date(row),'ET','MM/dd/yyyy');
        var expireDateMonth = new Date(row).getMonth() + 1;
        var expireDateDay = new Date(row).getDate();
        Logger.log("Expire date is:" + expireDateDay);
        
        //check for expiry date
        if (expireDateMonth === todayMonth && expireDateDay === todayDay) {
          var subject =
            'FEG AAAAAAManagement - An action item is due today!! : ' + assignmenttext;
              // email information
          var message =
              " One of your action items is due today. " +
              '\n' +
              '\n' +
              ' Project: ' +
              project +
              '\n' +
              '\n' +
              ' Action Item: ' +
              assignmenttext +
              '\n' + 
              '\n' +
              'Check the Tracker now !!' + 
              '\n' +
              url;
          if (user === 'JD') {
            MailApp.sendEmail(emailJonDoe, subject, message);
          }
          if (user === 'ED') {
            MailApp.sendEmail(emailEmilyDoe, subject, message);
          }
        }
      }
    
    }
    
    函数sendmail(){ //今天的日期信息 var today=新日期(); var todaymount=today.getMonth()+1; var todayDay=today.getDate(); var todayYear=today.getFullYear(); Logger.log(今天); //从电子表格中获取数据 var url=SpreadsheetApp.getActiveSpreadsheet().getUrl(); var sheet=SpreadsheetApp.openByUrl(url).getSheetByName(“分配”); var resultssn=SpreadsheetApp.openByUrl(url.getName(); //电子邮件地址 var emailJonDoe=”example@example.com" var emailydoe=”example@example.com" var lastRow=sheet.getLastRow(); var dataRange=sheet.getRange(2,1,lastRow,8).getValues(); //在所有行中循环 对于(变量i=0;i 在一个样本上运行这个
    function emailAlert() { 
      const sentcolumn=45;//I recommend adding some column to contain and indication of when an email is already been sent.
      const ss=SpreadsheetApp.getActive();
      const sh=ss.getSheetByName("Assignments");
      const vA=sh.getRange(5,1,5,sentcolumn).getValues();//your data went from row 5 to row 9 that is five rows  
      const dt=new Date();
      const today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();//this is a number
      const emails={"JD":"jd@example.com","ED":"ed@example.com"};//emails
      const prefix={"JD":"FEG AAAAAAManagement - An action item is due today!! : ","ED":"FEG DDDDDManagement - An action item is due today!! : "};//subject prefixes
      vA.forEach(function(r,i){
        let x=new Date(r[7]);
        let duedate=new Date(x.getFullYear(),x.getMonth()+1,x.getDate()).valufOf();//this is a number
        var body=Utilities.formatString('One of your action items is due today. \n\n Project: %s \n\n Action Item: %s\n\nCheck the Tracker now !!\n%s',r[1],R[2],ss.getUrl());
        let subject=prefix[r[3]] + r[2];
        if(today==duedate && r[sentcolumn-1]!='Sent') {
          GmailApp.sendEmail(emails[r[3]],subject,body);
          sh.getRange(i+5,sentcolumn).setValue('Sent');//adding something like this would keep you from sending duplicate emails by mistake
        }
      });
    }