2016-12-29 30 views
0

私は2つの列の値をループするスプレッドシートに取り組んでいます。 1つの列(47)は、電子メールで送信されるメッセージを含み、他の列(48)は、メッセージが送信された時点のタイムスタンプを含む。Googleスプレッドシート== '' not working

スクリプトは、メッセージ値が空でないか、タイムスタンプが空であるかどうかをチェックします。そうであれば、これはメッセージが送信されなかったことを意味し、スクリプトはメッセージを送信します。

タイムスタンプ欄に値があればメッセージを送らないようにしたいです。私は以前これを使用していましたが、過去にはうまくいきましたが、今はなぜ動作していないのか分かりません。タイムスタンプはありますが、それでもメッセージは送信されます。私は何が欠けていますか?ここでは、コード(。申し訳ありませんが、それは私が知っている、最高の書かれたコードではありません、それが良いのは理解されるであろうようにする任意のヒント)です:

function listingPending2WeekNoticeEmail() { 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("VacancyReportMarketing"); 

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

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

    // grab the '2 week notice sent' column 48 (AV)) 
    var range = sheet.getRange(2,48,lastRow-startRow+1,1); 
    var numRows = range.getNumRows(); 
    var timestamp_values = range.getValues(); 

    // Now, grab the listing pending 2 week notice column 47 (AU) 
    range = sheet.getRange(4, 47, lastRow-startRow+1, 1); 
    numRows = range.getNumRows(); 
    var reminder_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 timestamp = timestamp_values[i][0]; 
    var reminder_info = reminder_info_values[i][0]; 
    // var days_left = days_left_values[i][0]; 
    if(reminder_info != '' && timestamp == '') { 
     Logger.log(timestamp); 
     // if reminder not empty but timestamp empty, do something with the data. 

     var reminder_name = reminder_info_values[i][0]; 

     msg = msg + reminder_name+"\n\n"; 
     var msg2 = "\n"+"Within the 2 weeks prior to unit being estimated ready, Marketing Department should begin advertising the above units. If assets are missing, Marketing should begin scheduling with the property manager a time to visit the property as soon as it is ready. Please begin to compile your schedule to collect missing assets and submit to Marketing Manager for approval. Thank you!" 
     warning_count++; 


    } 
    } 

    if(warning_count) { 
    MailApp.sendEmail("[email protected],[email protected]", 
         "2 WEEK NOTICE - LISTINGS PENDING", msg+msg2); 
    timestamp2WeekNoticeSent(); 

    } 

}; 

function timestamp2WeekNoticeSent(){ 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("VacancyReportMarketing"); 
    var lastRow = sheet.getLastRow() 

    for (var i = 1; i <= lastRow; i++){ 
    // get column AU (47), every row to last row 
    var noticeRange = sheet.getRange([i], 47); 
    var noticeValues = noticeRange.getValues(); 
    // get column AV (48), every row to last row 
    var timeRange = sheet.getRange([i], 48); 
    var timeValues = timeRange.getValues(); 

    if (noticeValues != '' && timeValues == ''){ // 
     timeRange.setValue(new Date()); 

    } 
    } 
} 
+0

電子メールを送信するかどうかを決定する変数は 'warning_count'です。だから、そのループの 'Logger.log(warning_count)'をログに記録して、なぜそれが正になるのかを確認してください。 – FTP

答えて

1

私はちょうど私が始まるコラム48の範囲を得ていることに気づきました私の開始行が4でなければならない行2。列47の範囲が4から始めるべきです。不一致のため、値をループすると、同じ行でループされません。だから、私は単に列48のgetRange値を2ではなく4で始めるように変更しました。現在は動作しています。 ...