Google apps script 谷歌应用程序脚本-仅在本年度发送电子邮件
在我们学院,我们在学生在校期间借出Chromebook,我们在联系学生要求归还Chromebook时非常松懈,因此在他们离开后,我们往往会迎头赶上,必须联系他们将他们带回来 学生停留的时间从1年到3年不等。我想创建一个记录表,在那里我们可以跟踪这些学生以及他们借用了什么设备。然后在他们离开的前一个月,自动发送电子邮件说他们需要将Chromebook归还给我们 在我的工作表中,我们有一个“预期返回日期”,我们只输入他们应休假的年份,因为每个学生的实际休假数据因其科目而异。我的想法是,在任何学生离开学校的前一天,我会设置一个触发器,让他们跑 我对脚本编写非常陌生,但到目前为止,我已经构建了一个脚本(使用大量谷歌搜索、复制我在网上找到的内容并进行修补),它将查看工作表,找到没有“EMAIL_SENT”字样的任何数据行,然后发送电子邮件。如果显示“EMAIL_SENT”,则跳过它们。当我说我是新来的,我花了一周的时间才说到这一点 我将添加触发器,使其每年仅运行一次,但我只希望它向今年将离开的学生发送电子邮件,无论他们在工作表中的顺序如何。有没有一种方法可以让它调用当前年份,查找预期的返回日期,并仅在同一年发送 我目前的剧本如下 希望这是有意义的Google apps script 谷歌应用程序脚本-仅在本年度发送电子邮件,google-apps-script,google-sheets,scripting,Google Apps Script,Google Sheets,Scripting,在我们学院,我们在学生在校期间借出Chromebook,我们在联系学生要求归还Chromebook时非常松懈,因此在他们离开后,我们往往会迎头赶上,必须联系他们将他们带回来 学生停留的时间从1年到3年不等。我想创建一个记录表,在那里我们可以跟踪这些学生以及他们借用了什么设备。然后在他们离开的前一个月,自动发送电子邮件说他们需要将Chromebook归还给我们 在我的工作表中,我们有一个“预期返回日期”,我们只输入他们应休假的年份,因为每个学生的实际休假数据因其科目而异。我的想法是,在任何学生离开
// This constant is written in column I for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';
/**
* Sends non-duplicate emails with data from the current spreadsheet.
*/
function sendEmails2(){
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // first row of data to process
var numRows = 1000; // number of rows to process
// Fetch the range of cells A2:B4
var dataRange = sheet.getRange(startRow, 1, sheet.getLastRow()-1,9);
// Fetch values for each row in the Range.
var data = dataRange.getValues ();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[3]; // fourth column
var recipient = row[0]; // first column
var asset = row[6]; // seventh column
var loanDate = row [7] + ""; // seventh column
var returnDate = row[8]; // ninth column
var message = 'Hi ' + recipient + '. \n\n' + 'On ' + loanDate + ' you borrowed Chromebook ' + asset + ' from Learning Support. \n\n' + 'Since you are soon to leave the college, we require this Chromebook to be returned to the IT Office before the 30/06/' + returnDate + '. \n\n' + 'Kind regards,\n\n' + 'IT Services';
var emailSent = row[2]; // third column
if (emailSent !=EMAIL_SENT) { //prevents sending duplicates
var subject = 'Chromebook Loan';
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
sheet.getRange(startRow + i, 10).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
//此常量写在I列中,用于发送电子邮件的行
//已成功发送。
var EMAIL_SENT='EMAIL_SENT';
/**
*发送包含当前电子表格数据的非重复电子邮件。
*/
函数sendmails2(){
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var numRows=1000;//要处理的行数
//获取单元格A2:B4的范围
var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-1,9);
//获取范围中每行的值。
var data=dataRange.getValues();
对于(变量i=0;i
您只需添加一个获取当前年份的变量,然后在您的if
中添加一个新条件,该条件检查这两个变量
因此,新变量:
var yearNow = newDate.getFullYear();
以及如果:
if (emailSent !=EMAIL_SENT && returnDate == yearNow)
要添加每年运行一次的触发器,可以使用以下功能:
function createTheTrigger() {
ScriptApp.newTrigger('sendEmails2')
.timeBased()
.everyWeeks(52)
.create();
}
上述功能创建一个触发器,该触发器将每52周运行一次,大约1年
此外,我建议您查看以下链接,因为它们可能会有所帮助:
- )
- )
你们中的许多人的数组索引似乎不正确。尽管它们都有效,但可能我的标签不正确,我会更新它们。你说的“调用当前年份”是什么意思?您可以使用(new Date()).getYear()
获取当前年份,并将其与年份值进行比较。这就是你想要的吗?