Google apps script 如何根据谷歌表单中的单元格日期发送提醒日期?

Google apps script 如何根据谷歌表单中的单元格日期发送提醒日期?,google-apps-script,google-sheets,google-sheets-api,Google Apps Script,Google Sheets,Google Sheets Api,我一直在研究如何从谷歌表单中的一个单元格发送基于特定日期的电子邮件。我发现了这个,它几乎完全符合我想做的,因为时间对我来说并不重要 我的问题是,当我使用代码时,我得到了错误TypeError:在对象中找不到函数toLocaleDateString。(第19行,文件“代码”) 这是我的工作表设置的副本: 这是我的代码,为我的列等设置了格式 var EMAIL_SENT = "EMAIL_SENT"; function sendEmails3() { var today = new Date(

我一直在研究如何从谷歌表单中的一个单元格发送基于特定日期的电子邮件。我发现了这个,它几乎完全符合我想做的,因为时间对我来说并不重要

我的问题是,当我使用代码时,我得到了错误TypeError:在对象中找不到函数toLocaleDateString。(第19行,文件“代码”)

这是我的工作表设置的副本:

这是我的代码,为我的列等设置了格式

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 EMAIL\u SENT=“EMAIL\u SENT”;
函数sendmails3(){
var today=new Date().toLocaleDateString();//今天的日期,没有时间
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var numRows=999;//要处理的行数
//获取单元格A2:B999的范围
var dataRange=sheet.getRange(startRow,1,numRows,999)
//获取范围中每行的值。
var data=dataRange.getValues();
对于(变量i=0;i
如何修复此错误?除了这个错误,我还有没有办法在我的工作表中给两个联系人都发电子邮件


谢谢你所能提供的一切帮助

出现错误的最可能原因是您试图访问空单元格并试图将其转换为日期字符串

修改此行:

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();
    }
  }
}
函数sendmails3(){ var today=new Date().toLocaleDateString();//今天的日期,没有时间 var sheet=SpreadsheetApp.getActiveSheet(); var startRow=2;//要处理的第一行数据 var numRows=sheet.getLastRow()-1;//要处理的行数,-1,因为您是从第2行开始的 //获取单元格A2:G的范围(LastRow-1) var dataRange=sheet.getRange(startRow,1,numRows,8) //获取范围中每行的值。 var data=dataRange.getValues(); 对于(变量i=0;i 希望有帮助

这一行:

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;要更改您拥有的行数并尝试代码吗?我认为您正在尝试将空字符串转换为日期字符串,从而导致问题