If statement textfinder和IF的问题

If statement textfinder和IF的问题,if-statement,google-apps-script,If Statement,Google Apps Script,我有一段代码是从另一个已知正在工作的代码中搜出来的。它所做的是使用textfinder搜索列中的值,在本例中是昨天的日期,如果没有找到任何内容,它应该发送一封电子邮件 function findAndSendMail() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FormResponses'); var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSh

我有一段代码是从另一个已知正在工作的代码中搜出来的。它所做的是使用textfinder搜索列中的值,在本例中是昨天的日期,如果没有找到任何内容,它应该发送一封电子邮件

function findAndSendMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FormResponses');
  var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AlertDate');
  var search = ss2.getRange("B2").getValue(); //cell has yesterday's date
  var lastRow = ss.getLastRow();
  var range = ss.getRange(1,4,lastRow); //define range for column D, column D contains dates
  //find all occurrences of search key in column D and push range to array
  var ranges = range.createTextFinder(search).findAll();

if (ranges!==null) {
  var message = '';
  }else {
  var message = 'Test';
  }

  var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EmailGroup").getRange("A1");
  var emailAddress = emailRange.getValues();

  var subject = 'Subject';
  var link = "blahblahblah"

  if (message) {
    MailApp.sendEmail(emailAddress, subject,  '**This is an automated message**\n\n' + message + '\n\n**This is an automated message**\n' + link);
  }
}
如您所见,它应该搜索D列,然后,如果它找到了什么,消息变量将为空,否则如果它没有找到任何内容,它将向所选的电子邮件地址发送电子邮件。我不确定textfinder的结果如何处理这个问题,我认为它的编写方式是不正确的。非常感谢您的帮助,不幸的是,我无法共享有问题的文档,因为我的公司不允许在域外共享。谢谢大家!

试试这个:

您需要更新我将其移动到行末注释的图纸名称

function findAndSendMail() {
  var ss=SpreadsheetApp.getActive()
  var sh1=ss.getSheetByName('Sheet1');//FormResponses
  var sh2=ss.getSheetByName('Sheet2');//AlertDate
  var d1=new Date(sh2.getRange("B2").getValue()); //cell has yesterday's date
  var d2=new Date(d1.getFullYear(),d1.getMonth(),d1.getDate()).valueOf();
  var rg1 = sh1.getRange(1,4,sh1.getLastRow(),1);
  var vA=rg1.getValues().map(function(r){
    var dt=new Date(r[0]);
    var dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
    return dtv;
  });
  if(vA.indexOf(d2)==-1) {
    var message='test';
    var emailAddress = ss.getSheetByName("Sheet3").getRange("A1").getValue();//EmailGroup
    var subject = 'Subject';
    var link = "blahblahblah"
  }
  if (message) {
    MailApp.sendEmail(emailAddress, subject,  '**This is an automated message**\n\n' + message + '\n\n**This is an automated message**\n' + link);
    //SpreadsheetApp.getUi().alert('I found something');//just for testing
  }
}
如果找不到昨天,此版本将发送电子邮件

在回答最后一个问题时:

function findAndSendMail() {
  var ss=SpreadsheetApp.getActive()
  var sh1=ss.getSheetByName('Sheet1');//FormResponses
  var sh2=ss.getSheetByName('Sheet2');//AlertDate
  var d1=new Date(sh2.getRange("B2").getValue()); //cell has yesterday's date
  if(isDate(d1)) {
    var d2=new Date(d1.getFullYear(),d1.getMonth(),d1.getDate()).valueOf();
    var rg1 = sh1.getRange(1,4,sh1.getLastRow(),1);
    var vA=rg1.getValues().map(function(r){
      var dt=new Date(r[0]);
      var dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
      return dtv;
    });
    if(vA.indexOf(d2)==-1) {
      var message='test';
      var emailAddress = ss.getSheetByName("Sheet3").getRange("A1").getValue();//EmailGroup
      var subject = 'Subject';
      var link = "blahblahblah"
      }
    if (message) {
      MailApp.sendEmail(emailAddress, subject,  '**This is an automated message**\n\n' + message + '\n\n**This is an automated message**\n' + link);
      //SpreadsheetApp.getUi().alert('I found something');//just for testing
    }
  }else{
    SpreadsheetApp.getUi().alert('Data is sheet2!B2 is not a date')
    return;
  }
}

function isDate(date){ 
  return(Object.prototype.toString.call(date) === '[object Date]'); 
}

B2的内容是字符串或日期,因为textFinder搜索文本或正则表达式。关于D栏的问题也是一样。很好。这是一个公式,=today()-1试试我的答案。看看它是否适合你。我可能需要将getValues()更改为getDisplayValues();我没能做到这一点。我已经更新了工作表的名称。我目前在AlertDate的B2中有昨天的日期,FormResponses中没有匹配的日期,我的电子邮件中没有收到通知。很抱歉,我没有提供任何其他帮助,我正在尝试破译您给我的代码,但它有点超出我的能力。好的,我将日期更改为在FormResponses中找到的日期,我收到了消息。这个代码是否设置为在没有找到匹配项或找到某个内容时发送消息?事实上,我想我知道了。我只是在if之后把它改成了else
if(vA.indexOf(d2)!=-1){else{var message='test';var emailAddress=ss.getSheetByName(“EmailGroup”).getRange(“A1”).getValue();//EmailGroup var subject='test';var link=“blahblahblah”}
实际上你所要做的就是这
if(vA.indexOf(d2)=-1){
它不必是日期,只要它是date()构造函数可以识别的字符串。如果要测试它是否是日期,可以使用此
函数isDate(date){return(Object.prototype.toString.call(date)=='[Object date]';}