私はまだここでロープを学んでいます。他の寄稿者が提案したコードに基づいて、Google フォームを使用して時間エントリを記録するコンサルタントにリマインダー メールを送信するスクリプトをまとめました。スプレッドシートは、最初に各コンサルタントのすべてのジョブ情報を含むカレンダー エントリをインポートします。カレンダー エントリがインポートされた後、コンサルタントがまだ時間エントリを記録していない場合は、次のスクリプトによって、そうするように促すメールが送信されます。
function sendReminder() {
var rmndrFrom = "XYZ, Inc.";
var myemail = "support@xyz.com";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Pending");
var numRows = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
var dataRange = sheet.getRange(2, 1, numRows, lastCol); // row 1 is the header row
var sheetData = dataRange.getValues();
for (var i = 0; i < sheetData.length; ++i) {
var row = sheetData[i];
if (row[0]){
var jobNumb = row[0]; // Job Number
var conName = row[2]; // Consultant Name
var conMail = row[3]; // Consultant Email
var jobDate = row[4]; // Date
// format email string
var subject = "Time Entry Reminder: " + conName + " / Job " + jobNumb;
try {
var conMsgH = 'This is a reminder for you to record your time entry for Job #<strong>' + jobNum + '/' + jobDate + '</strong>';
// strip HTML for plain text message
var conMsgP = conMsgH.replace(/\<br\/\>/gi, '\n').replace(/(<([^>]+)>)/ig, "");
// send reminder to consultants
MailApp.sendEmail(conMail, subject, conMsgP, { htmlBody:conMsgH, name:rmndrFrom });
} catch (e) { // error handler
MailApp.sendEmail(myemail, "Error in sending reminder email.", e.message);
}
}
}
}
基本的に、このスクリプトは Pending シートを解析し、列 A にジョブ番号がある場合、そのジョブ番号でコンサルタントにリマインダー メールを送信します。ただし、1 人のコンサルタントの名前に複数のジョブ番号が含まれている場合があります。各コンサルタントに、時間エントリを記録する必要があるジョブ番号のリストを記載した電子メールを 1 通送信するスクリプトが必要です。
よろしくお願いいたします。コードを最適化する方法についての提案も大歓迎です。