我建立的系统将执行以下操作:谷歌表/表单脚本截止日期提醒电子邮件发送错误的反应编辑链接
- 用户提交
- 的确认电子邮件中的链接发送给编辑表单响应(到目前为止好)的形式
- ,有一个“截止日期”的问题
- 触发脚本扫描这些日期的每一天
- 当到期日已经到来,它会发送提醒邮件(这也发生公关operly,但) 在此提醒电子邮件
- ,编辑链接是重复的,这样用户不必搜索以前的邮件
可悲的是这个环节送出错误的。它不链接到正确的响应,而是链接到最后编辑(提交)的响应。
下面是脚本:
function sendReminderEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow()-1; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Logger.log(data)
var form = FormApp.openById("IDremovedByMe");
var formResponses = form.getResponses();
var r = formResponses.length-1;
var editURL = formResponses[r].getEditResponseUrl();
//Get the Edit URL
for (i in data) {
var row = data[i];
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
//Logger.log(date);
var sheetDate = new Date(row[13]);
//Logger.log(sheetDate);
var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy:MM:dd')
var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0100', 'yyyy:MM:dd')
Logger.log(Sdate+' =? '+SsheetDate)
if (Sdate == SsheetDate){
var sendTo = row[4]; // Collect email address from the fourth column (number value is always -1).
var sendMe = "[email protected]"; // Enter the email address where you wish to receive a notification about a reminder sent.
var sendername = "Auto Formbot"; // Name displayed as the sender.
var myname = "Formbot"; // Name displayed as the sender to you.
var messageTo = "Based on the data you entered, the '" +row[6] +"' project with the ID: " +row[1] +" has ended.\n\nPlease mark it as 'Completed' and update the details as soon as it's convenient for you.\n\nYou can edit your data by using the following link:\n" + editURL + "\n\nThank you for your time.\n\n\nWith kind regards,\nFormbot";
var messageMe = "The '" +row[6] +"' project with the ID: " +row[1] +" has finished today.\n\nA reminder email has been sent to " +row[4] +".\n\nYou can edit the data by using the following link:\n" + editURL + "\n\n\nSincerely,\nFormbot";
// Above is the column (number value is always -1) selected for activity name display.
var subjectTo = "Please update the '" +row[6] +"' activity data.";
var subjectMe = "An activity has finished today [ID: " +row[1] +"].";
MailApp.sendEmail(sendTo, subjectTo, messageTo, {name: sendername});
MailApp.sendEmail(sendMe, subjectMe, messageMe, {name: myname});
}
}
}
的问题显然是这一部分:
var form = FormApp.openById("IDremovedByMe");
var formResponses = form.getResponses();
var r = formResponses.length-1;
var editURL = formResponses[r].getEditResponseUrl();
我只是不知道浩w解释脚本如何获得适当的响应。
也许我的做法是错误的,也许我应该告诉脚本扫描形式的数据库,而不是链接的电子表格?任何想法如何做到这一点?
我可以想到两种可能的解决方案。两种可能的解决方案都涉及将一些额外信息保存到电子表格。最好的解决方案是将原始编辑URL保存到电子表格中。所以,不要从表单中获取编辑网址。另一种解决方案是将响应ID保存到电子表格中,并通过ID查找正确的表单响应,然后从该响应中获取编辑URL。这两个解决方案看起来很简单,但有一些复杂性。如果不是不可能在电子表格中找到正确的行来追加ID或编辑网址,这非常困难。 –
因此,您需要将所有数据保存到不同的电子表格中,而不是使用“内置”功能。因此,您需要进行更多编程才能将响应数据保存到完全不同的电子表格中,而不是使用“内置”功能的电子表格。您可以尝试通过匹配时间戳和其他信息来查找表单中的正确响应,但可能在表单中具有多个完全相同的时间戳。所以,这不是一个可行的解决方案,除非您确定没有人在同一秒内提交表格。 –
感谢您的建议,并为最近的回复感到抱歉。最后,我选择在表格中记录编辑网址并从那里引用它们。 – mozzribo