如何根据Google表格中的单元格日期发送提醒日期?
问题描述:
我一直在研究如何根据Google表格中单元格的特定日期发送电子邮件。我发现这个article,这几乎完全是我想做的事,因为时间对我来说无关紧要。如何根据Google表格中的单元格日期发送提醒日期?
我的问题是,当我使用代码,我得到错误TypeError:无法找到函数toLocaleDateString在对象中。 (第19行,文件“代码”)。
这里是片设置的副本,我有:https://docs.google.com/spreadsheets/d/1FlrpvLMRMuq8t6pI4inlKI2acrZJ68pyGHQ7Xtqi5AU/edit?usp=sharing
这里是我的代码,格式为我的专栏等
var EMAIL_SENT = "EMAIL_SENT";
function sendEmails3() {
var today = new Date().toLocaleDateString(); // Today's date, without time
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 999; // Number of rows to process
// Fetch the range of cells A2:B999
var dataRange = sheet.getRange(startRow, 1, numRows, 999)
// 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]; // POC Email column D
var subject = row[5]; // Subject column F
var message = row[6]; // Message column G
var emailSent = row[7]; // Output the message is sent in column H
var reminderDate = row[2].toLocaleDateString(); // date specified in cell C
if (reminderDate != today) // Skip this reminder if not for today
continue;
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 4).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
如何解决这个问题?除了错误之外,我还可以通过电子邮件发送我的工作表中的两个联系点吗?
谢谢你提供的所有帮助。
答
你得到错误的最可能原因是你试图访问一个空单元并试图将它转换成日期字符串。
修改这一行:
var numRows = 999;
以下
var numRows = sheet.getLastRow()-1 // Get last row, -1 because your startrow is 2
是有它的数据,所以你只能访问行。 也可以发送电子邮件给多个人只是包括在这样的逗号分隔字符串的所有电子邮件:
var emailAddress = row[3] + "," + row[4]; // POC Email column D and E (Just create a comma seprated email list to send email to multiple people)
找到下面的修改后的代码:
function sendEmails3() {
var today = new Date().toLocaleDateString(); // Today's date, without time
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow() - 1; // Number of rows to process, -1 since you are starting from row 2
// Fetch the range of cells A2:G(LastRow -1)
var dataRange = sheet.getRange(startRow, 1, numRows, 8)
// 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] + "," + row[4]; // POC Email column D and E (Just create a comma seprated email list to send email to multiple people)
var subject = row[5]; // Subject column F
var message = row[6]; // Message column G
var emailSent = row[7]; // Output the message is sent in column H
var reminderDate = row[2].toLocaleDateString(); // date specified in cell C
if (reminderDate != today) // Skip this reminder if not for today
continue;
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
希望帮助!
答
这条线:
var reminderDate = row[2].toLocaleDateString(); // date specified in cell C
你应该分解成多个操作:
var cellValue,reminderDate;//Define variables at top of function
cellValue = row[2];// date specified in cell C
if (!cellValue) {continue;}//If there is no cell value continue looping
if (typeof cellValue === 'object') {
reminderDate = cellValue.toLocaleDateString();
} else {
cellValue = new Date(cellValue);//Convert date as string to object
reminderDate = cellValue.toLocaleDateString();
}
你有999行的数据?你可以改变这一行:var numRows = 999;到你有的行数并尝试一下代码?我认为你试图将一个空字符串转换为一个日期字符串,从而导致问题 –