【发布时间】:2020-05-10 20:53:39
【问题描述】:
在我们的大学里,我们在学生期间借出 Chromebook,我们在联系学生要求他们归还时非常松懈,因此在他们离开后我们往往会赶上并必须联系他们才能让他们回来.
学生的逗留时间从 1 年到 3 年不等。我想创建一个日志表,我们可以在其中跟踪这些学生以及他们借用的设备。然后在他们离开的前一个月,自动发送一封电子邮件,告知他们需要将 Chromebook 归还给我们。
在我的工作表中,我们有一个“预计返回日期”,我们只输入他们应离开的年份,因为每个学生的实际休假数据因学科而异。我的想法是,我会在任何学生离开大学的前一天设置一个触发器来运行。
我对脚本非常陌生,但到目前为止,我已经构建了一个脚本(使用大量 Google 搜索,复制我在网上找到的内容并进行修改),它将通过工作表查找任何数据行,而无需其中包含“EMAIL_SENT”字样并发送电子邮件。如果它显示“EMAIL_SENT”,它会跳过它们。当我说我是新人时,我花了一周的时间才达到这一点。
我将添加触发器使其每年只运行一次,但我只希望它向今年将要离开的学生发送电子邮件,无论他们在工作表中的顺序如何。有没有办法让它调用当前年份,查找预期的返回日期并仅在同一年发送?
到目前为止,我的脚本如下。
希望这是有道理的。
// 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();
}
}
}
【问题讨论】:
-
你们中的许多人的数组索引似乎不正确。
-
它们都有效,也许我的标签不正确,我会更新这些。
-
“调用当前年份”是什么意思?您可以使用
(new Date()).getYear()获取当前年份并将其与您的年份值进行比较。这就是你所追求的吗?
标签: google-apps-script google-sheets scripting