【问题标题】:Automatically Generate an E-mail in a Google Sheet based of a Date/Time in a Cell?根据单元格中的日期/时间自动在 Google 表格中生成电子邮件?
【发布时间】:2017-09-06 23:11:18
【问题描述】:

我有这个电子表格 Example Sheet

当人们登录时,自动时间戳进入 A 列,然后 L 列计算未来 12 小时后的日期/时间。

我想做的是让工作表在指定时间在 L 列中的指定时间向 K 列中的地址生成一封自动电子邮件-仅当此人没有输入第一列“退出时间”中的时间。

基本上,人们擅长登录,但总是忘记退出。 我希望自动发送一封提醒电子邮件,让他们回到工作表并设置退出时间。如果没有,他们将收到一封电子邮件提醒。

电子邮件的标准主题行是:“请记住退出” 该电子邮件的标准正文为:“您可能尚未退出,请点击此链接立即退出”

即使工作表未打开,我是否可以使用时间或分钟触发器来使脚本发生?

我可以编写非常 A-B-C 的脚本,但这个超出了我的能力范围,而且我在搜索时得到的示例并未涵盖这种情况。

提前感谢您的帮助。

【问题讨论】:

  • 您可能需要检查此related SO post 以了解代码实现。然后使用Time-driven triggers 这将使您的脚本在特定时间执行或重复执行。另请注意,Apps 脚本服务每天都会施加quotas 并对某些功能进行严格限制。希望这会有所帮助。
  • 我试图调整该代码以满足我的需要,但我一直遇到问题。真正难以通过的部分是仅当第一列中没有数据输入时才发送电子邮件。我不确定如果/那么在其余代码的上下文中如何编写该逻辑。我会继续搞砸它,但如果没有更好的编码器的帮助,我不相信我能解决它。
  • 也许更简单的解决方案是使用时钟触发器上的脚本,每 3 小时运行一次(比如说),并围绕是否填充各个字段以及脚本的时间构建电子邮件逻辑开始运行。比每次用户登录时编写新的时钟触发器更容易实现。它不会为您提供您正在寻找的响应级别,但这是否足以达到目的?请发布一些代码,以便我们检查逻辑并提出建议。

标签: google-apps-script automation email


【解决方案1】:

又一个电子邮件问题

这完全未经测试,但已按照您的规范编写。我希望它对你有用。您将需要运行设置我的触发器和脚本本身来授权它。您还应该创建一个通常为空的列,直到您发送电子邮件,然后用一些东西填充它。在 if 语句中添加一些内容,例如 && vA[i][column number - 1],然后在 sendEmail 之后添加类似内容。 sh.getRange(i+1,column number).setValue('Dont send again'); 然后下次运行脚本时它不会向已经收到邮件的人发送电子邮件。

function sendEmailToThoseWhoHaveNotSignedOut()
{
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var lastHeaderRow=1;
  var now=new Date();
  var rdq=MailApp.getRemainingDailyQuota();
  for(var i=lastHeaderRow;i<vA.length;i++)
  {
    if(new Date(vA[i][11]).valueOf()<now.valueOf() && !vA[i][8] && vA[i][10] && rdq>0)
    {
      MailApp.sendEmail(vA[i][10], 'Please Remember to Sign Out', 'It appears you may not have signed out, please click this link to sign out now.')
    }
  }
}

function setUpMyTrigger()
{
  if(!isTrigger('sendEmailToThoseWhoHaveNotSignedOut'))//This prevents you from setting up more than one trigger at a time for the same function.
  {
    ScriptApp.newTrigger('sendEmailToThoseWhoHaveNotSignedOut').timeBased().everyHours(1).create();
  }
}

function isTrigger(funcName)
{
  var r=false;
  if(funcName)
  {
    var allTriggers=ScriptApp.getProjectTriggers();
    var allHandlers=[];
    for(var i=0;i<allTriggers.length;i++)
    {
      allHandlers.push(allTriggers[i].getHandlerFunction());
    }
    if(allHandlers.indexOf(funcName)>-1)
    {
      r=true;
    }
  }
  return r;
}

【讨论】:

  • 库珀,感谢您提供上面的脚本。它几乎对我有用。我对列顺序等进行了微调,现在它会每小时发送一次电子邮件,这很棒。我现在遇到的问题,或者至少据我所知,是它正在发送电子邮件,而不管单元格中是否输入了“退出”时间。它也只发送到底部的电子邮件。当我盯着代码时,我不知道要更改什么参数来解决这个问题。所以现在它每小时向上面示例表中列表中的第二个名字发送一封电子邮件。
  • *** 更正,无论退出时间列中是否有退出时间,它都会发送到两个电子邮件或“所有”电子邮件。如何修复它,以便它正确识别该列/单元格中的时间,并且仅在它为空时发送电子邮件?
  • 您的示例表是否反映了您上面提到的列调整。
  • 是的。该工作表是我正在使用、测试和运行脚本的工作表。
  • 您复制的代码不正确。应该是!vA[i][8]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多