私は周りを見回して、断片を持っていますが、パズルを組み立てることができません. 毎日実行するように構成されたトリガーで実行されるスクリプトを作成しようとしています。トリガーは、エディターの [リソース] オプションで設定されます。
基本的に、セルの範囲をキャプチャし、列に入力される期日を特定し、現在の日付に一致させるスクリプトを探しています。一致する場合は、メールを送信します。Google のスプレッドシート チュートリアルからメールを送信するところから始めました。日付を確認するためにifステートメントを追加しましたが、dataRangeとの比較で失われています。誰でもこれらの修正を手伝ったり、研究の方向性を教えてくれるかもしれません。
スクリプトは実行されているように見えますが、何も起こりません。これは、「if (currentTime == dataRange)」が原因であると考えられます。
コードは次のとおりです。
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
// Fetch the range of cells
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Get todays date
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
//Test column for date due & match to current date
if ( currentTime == dataRange) {
for (i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Task Item Due";
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
Srik から提供された提案を更新し、以下のコードで彼の提案を提供しています。私はこれを数回投稿しようとしましたが、過去の査読を行わない理由がわかりませんか?
function sendEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 50);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Browser.msgBox(data)
for (i in data) {
var row = data[i];
var date = new Date();
var sheetDate = new Date(row[1]);
if (date.getDate() == sheetDate.getDate() && date.getMonth() == sheetDate.getMonth() && date.getFullYear() == sheetDate.getFullYear());
{
var emailAddress = row[0]; // First column
var message = row[2]; // Second column
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
// Browser.msgBox(emailAddress)
}
}
}
コードは実行されているように見えますが、スクリプト エディターで次のエラーが表示されます。「メールの送信に失敗しました: 受信者がいません (23 行目)」。しかし、それでもメールは送信されます。日付を比較し、日付が一致する場合にのみメールを送信する必要があります。行ごとにメールを送信します。コードとスプレッドシートの設定方法を確認するために、スプレッドシートを共有しました。 共有スプレッドシート
ロガーと Utilities.formatDate の更新されたコード W/ SERGE HELP. ありがとう!!
function sendEmail() {
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[2]);
//Logger.log(sheetDate);
var Sdate = Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd')
var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
Logger.log(Sdate+' =? '+SsheetDate)
if (Sdate == SsheetDate){
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Your assigned task is due today." +message;
MailApp.sendEmail(emailAddress, subject, message);
//Logger.log('SENT :'+emailAddress+' '+subject+' '+message)
}
}
}