Google apps script 基于单元格值自动生成电子邮件

Google apps script 基于单元格值自动生成电子邮件,google-apps-script,Google Apps Script,我的代码有问题,我不确定丢失了什么。我以前编写过几次代码,但我绝对不是专家 我尝试在单元格值等于30时发送自动电子邮件提醒。我的代码成功运行,但根本不会生成电子邮件。我做错了什么 我不知道还有什么可以尝试,我已经找到了如何实现这一点,但对于如何实现这一点,我没有任何意义 function sendEmail(){ var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data"); var Dept = sSheet

我的代码有问题,我不确定丢失了什么。我以前编写过几次代码,但我绝对不是专家

我尝试在单元格值等于30时发送自动电子邮件提醒。我的代码成功运行,但根本不会生成电子邮件。我做错了什么

我不知道还有什么可以尝试,我已经找到了如何实现这一点,但对于如何实现这一点,我没有任何意义

function sendEmail(){
var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var Dept = sSheet.getRange(1, 1, sSheet.getLastRow(), 1);
var PDName = sSheet.getRange(1, 3, sSheet.getLastRow(), 3);
var HRPname = sSheet.getRange(1, 26, sSheet.getLastRow(), 26);
var HRPemail = sSheet.getRange(1, 27, sSheet.getLastRow(), 27);
var AnniversaryDate = sSheet.getRange(1, 12, sSheet.getLastRow(), 12);
var DaysUntilAnni = sSheet.getRange(1, 13, sSheet.getLastRow(), 13);


if (DaysUntilAnni == 30){
  var subject = "Upcoming Postdoc Anniversary: " + PDName + " - " + AnniversaryDate;  
  var message = "Hi " + HRPname + "," + "\n\n" + "The Postdoc appointment for "+PDName+" in "+Dept+" has an appointment end date and/or anniversary date coming up on "+AnniversaryDate+". Please review this postdoc appointment and" +
                 "\n\n" + "take necessary action to extend their appointment and/or update level change based on their anniversary date." +
                 "\n\n" + "Please update the BEST Postdoc Tracker no later than " +AnniversaryDate+ " once the actions have been completed."

                 "\n\n" + "You will continue to receive weekly reminders regarding this action until the appointment end date or anniversary date has been updated in the BEST Postdoc Tracker.";     
  MailApp.sendEmail(HRPemail, subject, message);
 }  
}

我的代码应该每天运行,并且应该向google表单中列出的相应人员发送电子邮件。

在这一行
var HRPemail=sSheet.getRange(1,27,sSheet.getLastRow(),27)您定义了一个从第1行第27列开始的范围,它是sSheet.getLastRow()行,有27列,并且您从未对其实际运行过getValue()或getValues()方法。因此,HRPemail中没有数据。它只是一个范围对象,它只是一个单元格集合

我怀疑您有一个包含多行数据的电子表格。对吧?

所以在和你聊天之后,我相信你会在这个剧本上取得更大的成功

function sendEmail(){
  var sSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var srg=sSheet.getRange(1,1,sSheet.getLastRow(),28);
  var sData=srg.getValues();
  for(var i=0;i<sData.length;i++) {
    var Dept = sData[i][0];//columns begin at 1 arrays begin at zero
    var PDName = sData[i][2];
    var HRPname = sData[i][25];
    var HRPemail = sData[i][2];
    var AnniversaryDate = sData[i][11];
    var DaysUntilAnni = sData[i][12];
    var Sent=sData[i][27];
    if (DaysUntilAnni == 30 && !Sent){
      var subject = "Upcoming Postdoc Anniversary: " + PDName + " - " + AnniversaryDate;  
      var message = "Hi " + HRPname + "," + "\n\n" + "The Postdoc appointment for "+PDName+" in "+Dept+" has an appointment end date and/or anniversary date coming up on "+AnniversaryDate+". Please review this postdoc appointment and" +
        "\n\n" + "take necessary action to extend their appointment and/or update level change based on their anniversary date." +
          "\n\n" + "Please update the BEST Postdoc Tracker no later than " +AnniversaryDate+ " once the actions have been completed."

          "\n\n" + "You will continue to receive weekly reminders regarding this action until the appointment end date or anniversary date has been updated in the BEST Postdoc Tracker.";     
      MailApp.sendEmail(HRPemail, subject, message);
      //i+1 is the row number assuming no headers
      sSheet.getRange(i+1,27).setValue('Sent');//if column 28 has data in it then an email will not be sent again on the next time through the loop.
    }  
  }
}
函数sendmail(){ var sSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“数据”); var srg=sSheet.getRange(1,1,sSheet.getLastRow(),28); var sData=srg.getValues();
对于(var i=0;i包括您的登录
View>Execution transcript
,以便我们可以查看它是否进入
sendmail()
code。谢谢Ross!太长了,所以我把它从我的g驱动器做成了一个pic链接。这是你的问题,
DaysUntilAnni
不等于30-所以你的
if
语句中的代码没有触发。明白了,我想我是想告诉它,当DaysUntilAnni等于30时,然后发送这封电子邮件。我工作表中的那一列是一个公式这计算了离周年纪念日还有多少天,我想在这个数字达到30的时候发送一封电子邮件。你会怎么处理它呢?嗨,咪咪,你完全正确!好吧,我明白你的意思了,我想我给它的范围也会得到这个值,我确实有几行数据。你想每行迭代一次吗d为每一行发送一封电子邮件?是的,但我只希望它在等于30时发送一封电子邮件。是的。我明白,让我们看看这行在(DaysUntilAnni==30&&!Sent)时做了什么{
它要求Dayuntlani等于30,并且之前的电子邮件没有提前发送。我确实将行的大小增加了一列,以容纳发送的列。您的电子表格上是否有空间容纳该额外列?