If statement textfinder和IF的问题
我有一段代码是从另一个已知正在工作的代码中搜出来的。它所做的是使用textfinder搜索列中的值,在本例中是昨天的日期,如果没有找到任何内容,它应该发送一封电子邮件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
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]';}