2017-12-14 13 views
1

今日の日付の列が今日から7日または1日離れている場合、私は電子メールリマインダを送信したいと思います。私は既にスクリプトを作っていますが、追加したいのは、それぞれの列のリマインダを送信するために、1つのスクリプトで1つだけでなく、他の列も考慮する必要があるということです。複数のコラムのリマインダ

例えばのために

: それは計画日付、計画日付1、計画日2及び計画日3

Sample Attachedを参照してくださいするために思い出させる必要があります。

スクリプト:

function checkReminder() { 
// get the spreadsheet object 
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
// fetch this sheet 
var sheet = spreadsheet.getSheets()[0]; 

// figure out what the last row is 
var lastRow = sheet.getLastRow(); 

// figure out what the last column is 
var lastCol = sheet.getLastColumn(); 

// the rows are indexed starting at 1, and the first row 
// is the headers, so start with row 2 
var startRow = 2; 

// the columns are indexed starting at 2, and the first column 
// is the headers, so start with column 2 
var startCol = 2; 

// grab column 3 (the 'days left' column) 
var range = sheet.getRange(2,3,lastRow-startRow+1,1); 
var numRows = range.getNumRows(); 
var days_left_values = range.getValues(); 

// Now, grab the reminder name column 
range = sheet.getRange(2, 1, lastRow-startRow+1, 1); 
var reminder_info_values = range.getValues(); 

// Now, grab the first row 
range = sheet.getRange(1, 2, lastCol-startCol+1, 1); 
var column_info_values = range.getValues(); 

var warning_count = 0; 
var msg = ""; 

// Loop over the days left values 
for (var i = 0; i <= numRows - 1; i++) { 
var days_left = days_left_values[i][0]; 
if(days_left == 1) { 
    // if it's exactly 1, do something with the data. 
    var reminder_name = reminder_info_values[i][0]; 
    var column_name = column_info_values[0][0]; 

    msg = msg + "Reminder: "+reminder_name+" - "+column_name+" is due in "+days_left+" day.\n"; 
    warning_count++; 
    } 
} 
for (var i = 0; i <= numRows - 1; i++) { 
var days_left = days_left_values[i][0]; 
if(days_left == 7) { 
    // if it's exactly 7, do something with the data. 
    var reminder_name = reminder_info_values[i][0]; 
    var column_name = column_info_values[0][0]; 

    msg = msg + "Reminder: "+reminder_name+" - "+column_name+" is due in "+days_left+" days.\n"; 
    warning_count++; 
} 
} 

if(warning_count) { 
MailApp.sendEmail("[email protected]", 
    "Reminder Spreadsheet Message", msg); 
} 

}; 
+0

このスクリプトは1列で正常に動作していますか? – Umair

+0

はい、そのBとCの列の作業 – Bkrmkrk

+0

私はそれに答えました。 – Umair

答えて

0

あなたは現在唯一の単一の列と処理のみを取得しています。 このスクリプトを他の列でも実行させるには、それらをループしてデータをフェッチし、次にそれらを1つずつ処理する必要があります。ここで

あなたは3列からデータをフェッチしている:

// grab column 3 (the 'days left' column) 
var range = sheet.getRange(2,3,lastRow-startRow+1,1); 
var numRows = range.getNumRows(); 
var days_left_values = range.getValues(); 

賢明なようにあなたは、最後の列までのループを実行することができ、第三、第五、第七..列からデータを取得し、それらを処理しておきます。

ので、コードはこの

function checkReminder() { 
    // get the spreadsheet object 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
    // fetch this sheet 
    var sheet = spreadsheet.getSheets()[0]; 

    // figure out what the last row is 
    var lastRow = sheet.getLastRow(); 

    // figure out what the last column is 
    var lastCol = sheet.getLastColumn(); 

    // the rows are indexed starting at 1, and the first row 
    // is the headers, so start with row 2 
    var startRow = 2; 

    // the columns are indexed starting at 2, and the first column 
    // is the headers, so start with column 2 
    var startCol = 2; 

    // Now, grab the reminder name column 
    range = sheet.getRange(2, 1, lastRow - startRow + 1, 1); 
    var reminder_info_values = range.getValues(); 

    // Now, grab the first row 
    range = sheet.getRange(1, 2, lastCol - startCol + 1, 1); 
    var column_info_values = range.getValues(); 

    var warning_count = 0; 
    var msg = ""; 

    for (var u = 3; u <= lastCol; u += 2) { 
     // grab the day's left column 
     var range = sheet.getRange(2, u, lastRow - startRow + 1, 1); 
     var numRows = range.getNumRows(); 
     var days_left_values = range.getValues(); 

     // Loop over the days left values 
     for (var i = 0; i <= numRows - 1; i++) { 
      var days_left = days_left_values[i][0]; 
      if (days_left == 1) { 
       // if it's exactly 1, do something with the data. 
       var reminder_name = reminder_info_values[i][0]; 
       var column_name = column_info_values[0][0]; 

       msg = msg + "Reminder: " + reminder_name + " - " + column_name + " is due in " + days_left + " day.\n"; 
       warning_count++; 
      } 
     } 
     for (var i = 0; i <= numRows - 1; i++) { 
      var days_left = days_left_values[i][0]; 
      if (days_left == 7) { 
       // if it's exactly 7, do something with the data. 
       var reminder_name = reminder_info_values[i][0]; 
       var column_name = column_info_values[0][0]; 

       msg = msg + "Reminder: " + reminder_name + " - " + column_name + " is due in " + days_left + " days.\n"; 
       warning_count++; 
      } 
     } 

     if (warning_count) { 
      MailApp.sendEmail("[email protected]", 
       "Reminder Spreadsheet Message", msg); 
     } 
    } 
} 

のようになりますこれは、すべての問題が生じた場合、私に知らせて、未テストコードです。私はあなたを助けてくれるでしょう。

ありがとうございました!

+0

ええ、それは他の列ではうまくいきましたが、同じリマインダ名で同時に複数のメールが届いています。また、計画の日付1、計画の日付2、計画の日付3などのように日付列ごとに列名を変更したいとします(今、「計画日」のみが言及されています)。 – Bkrmkrk

+0

サンプルを見せてもらえますか?あなたの問題を遠隔で理解することは難しいとは思えません。 – Umair

+0

サンプルのリンクは上記と同じである: リマインダー: ここ https://docs.google.com/spreadsheets/d/1o83cQK1R1V2LNdwCTZZjxLDJIZjBmvPod0s0UcIVQyU/edit#gid=0 、私は、電子メール通知を取得する必要があります。 DOT Renewal - 予定日は7日以内です。 注意:DOT - 計画日2は7日以内の予定です。 注意:DOT - 計画日3は1日以内の予定です。 備考:年次総会/ CRO - 計画日1は7日以内に期限が到来します。 注意:DOT更新 - 予定日1は1日以内の予定です。 備考:年次総会/ CRO - 計画日3は7日以内に期限が到来します。 電子メールリマインダースクリプトを修正してください。 ありがとうございます! – Bkrmkrk

関連する問題