我可以在工作表上有一个单元格来控制基于时间的触发器是否发送电子邮件吗?

问题描述 投票:0回答:1

我使用基于时间的触发电子表格,我们在周日填写数据,但在一周中的不同日期发送包含数据的电子邮件,以便为我们在不同日期开放的摊位订购鸡蛋。我们只想在特定的日子发送电子邮件,因为鸡蛋公司不擅长处理一封包含所有订单的电子邮件,也不擅长计算出什么时间、地点发送的信息 - 农民嘿!

这是我使用的脚本之一;

function sendSundayList(){
  var ss=SpreadsheetApp.getActive()
  var sh=ss.getSheetByName("NanaNick");
  var rg=sh.getRange("A10:B17")
  var vA=rg.getValues();
  var html='<style>td,th{border:1px solid black;}</style><table>';
  vA.forEach(function(r,i){
    html+='<tr>';
    r.forEach(function(c,j){
      if(i=0) {
        html+=Utilities.formatString('<th>%s</th>',c)
      }else{
        html+=Utilities.formatString('<td>%s</td>',c)
      }
    });
    html+='</tr>';
  });
  html+='</table>';
  var email_subj = "Egg Order to NanaNick BananaStall " + Utilities.formatDate(new     Date(), "GMT+1:00", "dd.MM.yyyy");
  MailApp.sendEmail({to: "[email protected]",subject: email_subj,htmlBody: "Hi     Mr Eggman:<br><br><br>" + html,bcc: '[email protected]'});
 //SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html),     'Display');//Just a dialog for testing the html
}

我希望能够在电子表格上指出一个或多个摊位那周不需要鸡蛋,因此不会发送电子邮件,方法是勾选复选框或在单元格中包含“停止”等文本来停止脚本那周运行(直到单元格未被选中)

电子表格可能看起来像

https://docs.google.com/spreadsheets/d/1ndVPDtdHtOB77t6WyDjtHJVwjsGFYt72xmogP6Zc0aI/edit?usp=sharing

AppleAndy 这周没有鸡蛋,或者我需要总是发送一封电子邮件,但在“没有鸡蛋”的几周里,它只会说;

AppleAndy 这周请不要吃鸡蛋

我不确定脚本是否可以在工作表中控制,或者是否有更好的方法来部署它,而不是通过基于时间的触发器

google-sheets google-apps-script triggers
1个回答
0
投票

您有八个摊位和一个每周向您的供应商发送一次电子邮件的脚本。但是您想为每个摊位发送单独的电子邮件,在一周中的特定一天发送每封电子邮件,甚至即使某个摊位没有订购鸡蛋,也可以发送一封“无鸡蛋”电子邮件。

考虑这个答案:

  • 脚本应由时间驱动的触发器每天触发。
  • 不需要 HTML 正文,并且可以简化正文,因为每封电子邮件都处理单个摊位和数量订单。
  • var rg=sh.getRange("A10:E17")
    :数据应扩展两到三列
    • C 列 - 使用复选框的“无鸡蛋”标志
    • D 列 - 输入发送电子邮件的工作日编号,其中星期一 = 1。
    • E 列(可选)-
      VLOOKUP
      公式,用于显示与工作日编号对应的日期名称。
      • ="=> "&vlookup(D10,Assumptions!$A$2:$B$8,2,0)
        并为每个摊位复制下来。
      • 请参阅“假设”表的屏幕截图。
  • var today= new Date().getDay()
    - 获取“今天”的天数
  •  for (i=0;i<vA.length;i++){
    - 循环 vA(数据)数组
  • test#1:
    if (vA[i][3] != today)
    - 今天是否应该发送给定摊位的电子邮件?
    • 如果否,则
      continue
      恢复到循环中的下一项
  • test#2:
     if(noEggsFlag == true){
    - 这是一封“无鸡蛋”电子邮件吗
    • 如果是,
      var body = "Hi Mr Eggman\nOur stall: "+stallName+" - no eggs this week thank you\nNanaNick"
      - 发送“没有鸡蛋”电子邮件
    • 如果没有,
      var body = "Hi Mr Eggman\nOur stall: "+stallName+" - please supply "+qty+" eggs this week thank you\nNanaNick"
      - 为给定的摊位发送订单。

function weeklyEggOrder() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var sh=ss.getSheetByName("NanaNick");
  var rg=sh.getRange("A10:E17")
  var vA=rg.getValues()
  var today= new Date().getDay()
  // Logger.log("DEBUG: Today = "+today) 
  
  // loop through the data looking for emails to be sent today
  for (i=0;i<vA.length;i++){
    // test for the "send" day
    var stallName = vA[i][0]
    var noEggsFlag = vA[i][2]
    var email_subj = "Egg order from NanaNick BananaStall: " + Utilities.formatDate(new     Date(), "GMT+1:00", "dd.MM.yyyy");
    if (vA[i][3] != today){
      // don't send email today
      Logger.log("DEBUG: Don't send email today for Stall:"+stallName+" (i="+i+")")
      continue
    }
    var noEggsFlag = vA[i][2]
    if(noEggsFlag == true){
      Logger.log("DEBUG: Send a 'No eggs' email today for Stall:"+stallName+" (i="+i+")")
      var body = "Hi Mr Eggman\nOur stall: "+stallName+" - no eggs this week thank you\nNanaNick"
      //Logger.log(body)
      MailApp.sendEmail({to: "<<insert email>>",subject: email_subj,body:body})
    }else{
    // send an email for an eggs order
    Logger.log("DEBUG: Send an Eggs order today for Stall:"+stallName+" (i="+i+")")
    var qty = vA[i][1]
    var body = "Hi Mr Eggman\nOur stall: "+stallName+" - please supply "+qty+" eggs this week thank you\nNanaNick"
    //Logger.log(body)
    MailApp.sendEmail({to: "<<insert email>>",subject: email_subj,body:body})
    }
  }
}

样本 - 数据

data


示例 - 电子邮件

emails


示例 - 假设

assumptions


示例 - 旧 html 电子邮件正文

oldbody



© www.soinside.com 2019 - 2024. All rights reserved.