我使用基于时间的触发电子表格,我们在周日填写数据,但在一周中的不同日期发送包含数据的电子邮件,以便为我们在不同日期开放的摊位订购鸡蛋。我们只想在特定的日子发送电子邮件,因为鸡蛋公司不擅长处理一封包含所有订单的电子邮件,也不擅长计算出什么时间、地点发送的信息 - 农民嘿!
这是我使用的脚本之一;
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 这周请不要吃鸡蛋
我不确定脚本是否可以在工作表中控制,或者是否有更好的方法来部署它,而不是通过基于时间的触发器
您有八个摊位和一个每周向您的供应商发送一次电子邮件的脚本。但是您想为每个摊位发送单独的电子邮件,在一周中的特定一天发送每封电子邮件,甚至即使某个摊位没有订购鸡蛋,也可以发送一封“无鸡蛋”电子邮件。
考虑这个答案:
var rg=sh.getRange("A10:E17")
:数据应扩展两到三列
VLOOKUP
公式,用于显示与工作日编号对应的日期名称。
="=> "&vlookup(D10,Assumptions!$A$2:$B$8,2,0)
并为每个摊位复制下来。var today= new Date().getDay()
- 获取“今天”的天数 for (i=0;i<vA.length;i++){
- 循环 vA(数据)数组if (vA[i][3] != today)
- 今天是否应该发送给定摊位的电子邮件?
continue
恢复到循环中的下一项 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})
}
}
}
样本 - 数据
示例 - 电子邮件
示例 - 假设
示例 - 旧 html 电子邮件正文