Google apps script 如何设置由日期触发的自动电子邮件警报

Google apps script 如何设置由日期触发的自动电子邮件警报,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在努力编写一个应用程序脚本来触发基于日期的自动电子邮件。我已经复习了其他问题/答案,但没有正确答案。我的谷歌表如下: 我的警报数据在H&S审查表中。 我的电子邮件在电子邮件通知表的A1单元格中 发送电子邮件的触发日期是H&S审查表的J列,我认为代码可以根据这一列和今天的J1单元格编写 Column J = date email to be sent Column I = first name of email recipient Column H = email address Colum

我正在努力编写一个应用程序脚本来触发基于日期的自动电子邮件。我已经复习了其他问题/答案,但没有正确答案。我的谷歌表如下:

我的警报数据在H&S审查表中。 我的电子邮件在电子邮件通知表的A1单元格中

发送电子邮件的触发日期是H&S审查表的J列,我认为代码可以根据这一列和今天的J1单元格编写

Column J = date email to be sent
Column I = first name of email recipient
Column H = email address
Column B = task per message
Column C = description per message
我的代码被称为
函数
sendmails`。你会发现它需要你的专业知识


此外,我希望可以将此警报写入电子邮件收件人谷歌日历,但不确定这是否可行。

以下是脚本中的代码,该代码经过修改,可在J列上的日期与J1中的日期匹配时发送电子邮件。我建议您将代码更改为使用getValues()[1]并循环生成的数组,而不是每次都使用getValues(),这样会更加优化,并防止您达到Google配额[2]

function sendEmails() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("H&S Reviews").activate();
  var lastRow = sheet.getLastRow();
  var message = spreadsheet.getSheetByName("Email Alerts").getRange(1,1).getValue();

  for (var i = 3;i<=lastRow;i++){

    var emailAddress = sheet.getRange(i, 8).getValue();
    var firstName = sheet.getRange(i, 9).getValue();
    var todaysDate = sheet.getRange(1, 10).getValue();
    var date = sheet.getRange(i, 6).getValue();
    date = Utilities.formatDate(date,'GMT+0200','dd MMMM yyyy');
    var task = sheet.getRange(i, 2).getValue();
    var description = sheet.getRange(i, 3).getValue();
    var messageBody = message.replace("{name}",firstName).replace("{Task}",task).replace("{Description}",description).replace("{Date}",date);
    var subject = "Health & Safety Review Task"; 

    var sendDate = sheet.getRange(i, 10).getValue();
    var sheetDate = new Date(sendDate);
    Sdate=Utilities.formatDate(todaysDate,'GMT+0200','yyyy:MM:dd')
    SsheetDate=Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
    Logger.log(Sdate+' =? '+SsheetDate)

    if (Sdate == SsheetDate){
      var subject = "Health & Safety Review Task";
      MailApp.sendEmail(emailAddress, subject, messageBody);
      Logger.log('SENT :'+emailAddress+'  '+subject+'  '+messageBody)
    }    
  }
}
函数sendEmails(){ var电子表格=SpreadsheetApp.getActiveSpreadsheet(); var sheet=电子表格.getSheetByName(“H&S审查”).activate(); var lastRow=sheet.getLastRow(); var message=spreadsheet.getSheetByName(“电子邮件警报”).getRange(1,1).getValue();
对于(var i=3;i这里是脚本中修改的代码,当J列上的日期与J1中的日期匹配时发送电子邮件。我建议您将代码更改为使用getValues()[1],并每次循环生成的数组,而不是使用getValues(),这将更加优化,并将防止您达到Google配额[2]

function sendEmails() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("H&S Reviews").activate();
  var lastRow = sheet.getLastRow();
  var message = spreadsheet.getSheetByName("Email Alerts").getRange(1,1).getValue();

  for (var i = 3;i<=lastRow;i++){

    var emailAddress = sheet.getRange(i, 8).getValue();
    var firstName = sheet.getRange(i, 9).getValue();
    var todaysDate = sheet.getRange(1, 10).getValue();
    var date = sheet.getRange(i, 6).getValue();
    date = Utilities.formatDate(date,'GMT+0200','dd MMMM yyyy');
    var task = sheet.getRange(i, 2).getValue();
    var description = sheet.getRange(i, 3).getValue();
    var messageBody = message.replace("{name}",firstName).replace("{Task}",task).replace("{Description}",description).replace("{Date}",date);
    var subject = "Health & Safety Review Task"; 

    var sendDate = sheet.getRange(i, 10).getValue();
    var sheetDate = new Date(sendDate);
    Sdate=Utilities.formatDate(todaysDate,'GMT+0200','yyyy:MM:dd')
    SsheetDate=Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
    Logger.log(Sdate+' =? '+SsheetDate)

    if (Sdate == SsheetDate){
      var subject = "Health & Safety Review Task";
      MailApp.sendEmail(emailAddress, subject, messageBody);
      Logger.log('SENT :'+emailAddress+'  '+subject+'  '+messageBody)
    }    
  }
}
函数sendEmails(){ var电子表格=SpreadsheetApp.getActiveSpreadsheet(); var sheet=电子表格.getSheetByName(“H&S审查”).activate(); var lastRow=sheet.getLastRow(); var message=spreadsheet.getSheetByName(“电子邮件警报”).getRange(1,1).getValue();
对于(var i=3;我可以问你关于你的问题吗?1.你的脚本有什么问题?2.虽然你的脚本可以在共享的电子表格中看到,但你能否将与你的问题相关的脚本显示给你的问题?3.关于
可以将此警报写入电子邮件收件人的谷歌日历中,你能否解释一下详细信息?我可以问一下你的问题吗?1.你的脚本有什么问题?2.虽然你的脚本可以在共享的电子表格中看到,但你能在你的问题中显示与你的问题相关的脚本吗?3.关于
可以将此警报写入电子邮件收件人的谷歌日历中,你能解释一下详细信息吗?谢谢-这似乎有效。我不会发送太多电子邮件,因此getValue不应该成为问题。我创建了一个按钮来强制发送电子邮件,但确实收到了一封,但日期格式如下:2019年11月27日星期三00:00:00 GMT+1300(NZDT)但我更希望它的格式为2019年11月27日。很高兴我能提供帮助。完成后,我在答案
date=Utilities.formatDate(日期,'GMT+0200','dd MMMM yyyy')中添加了这一行请帮我翻译一下。如果它对你有帮助,请考虑接受正确的答案。谢谢-这似乎是有效的。我不会发送很多电子邮件,所以价值不应该是一个问题。我创建了一个按钮来强制一个电子邮件,确实收到了一个,但是日期格式如下:11月27日2019时00分00分GMT + 1300(NZDT)。而我更喜欢把它格式化为2019年11月27日。很高兴我能帮助。做完了,我在回答<代码>日期=实用工具中添加了这行。格式化日期(日期,‘GMT+ 0200’,‘DD MMMYYYY’);< /代码>为此。如果它帮助了你,请考虑接受正确的答案。