[英]Google Sheets/Forms Script Due Date Reminder email Sends Wrong Response Edit Link
我設置的系統執行以下操作:
遺憾的是,此鏈接發送有誤。 它沒有鏈接到正確的響應,而是提供了到最后編輯(提交)的響應的鏈接。
這是腳本:
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 = "xyzabcloremipsum@gmail.com"; // 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();
我只是不確定如何解釋腳本如何獲得適當的響應。
也許我的方法是錯誤的,也許我應該告訴腳本掃描表單數據庫而不是鏈接的電子表格? 關於如何做到這一點的任何想法?
因此,我選擇將URL直接插入到響應表中並從那里引用它們。
我使用了在這里找到的腳本。
function injectEditURLs() {
// Form ID:
var form = FormApp.openById('IDremovedByMe');
// Name of the (main) sheet and NOT the Sheet file name where the URLs will appear:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Responses');
var data = sheet.getDataRange().getValues();
var urlCol = 11; // The number of the column in which the URL will be inserted; A = 1, B = 2 etc.
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [];
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(responses[i].getEditResponseUrl());
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
}
sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);
}
然后,我在提醒電子郵件腳本中引用了它(並刪除了不必要的部分):
" + row[n] +"
因此,它現在看起來像這樣工作:
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)
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 = "xyzabcloremipsum@gmail.com"; // 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" + row[10] + "\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" + row[10] + "\n\n\nSincerely,\nFormbot";
// Above is the column (number value is always -1 because A=0) 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});
}
}
}
您自己認為從表單數據庫進行掃描是最可行的選擇。 這是Google表單文檔頁面中的代碼片段,其功能完全相同:
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
這是該頁面的鏈接: https : //developers.google.com/apps-script/reference/forms/item-response
基本上,您將使用form.responses()獲得表單響應,然后遍歷每個響應並獲取截止日期,並檢查截止日期是否與今天相同。 然后發送該特定響應的編輯URL。
希望這會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.