0

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(); 
    } 
    } 
} 

どのように私はこのエラーを修正することができますなど、私の列の書式設定、私のコードですか?エラーに加えて、私のシートに両方の連絡先を電子メールで送信する方法はありますか?

ご協力いただきありがとうございます。

+0

あなたは、データの999行を持っていますか?この行を変更できますか?var numRows = 999;あなたが持っている行数に合わせてコードを試してみてください。空の文字列を日付文字列に変換しようとしているので、問題が発生していると思います –

答えて

0

エラーが発生する可能性が最も高いのは、空のセルにアクセスして日付文字列に変換しようとしていることが原因です。その中のデータを持って、次の

var numRows = sheet.getLastRow()-1 // Get last row, -1 because your startrow is 2 

ので、あなただけのアクセス行へ

var numRows = 999; 

は、この行を変更します。

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 emailAddress = row[3] + "," + row[4]; // POC Email column D and E (Just create a comma seprated email list to send email to multiple people) 

以下の変更されたコードを探す: はまた、複数の人に電子メールを送信するだけで、このようなカンマ区切りの文字列内のすべての電子メールが含まれています!

0

このライン:

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(); 
} 
関連する問題