在Google表格脚本编辑器中比较日期

时间:2020-05-12 23:53:41

标签: google-apps-script google-sheets

我对此很陌生,所以请多多包涵。我正在尝试让我的代码查看列中的每个单元格,然后将该日期与当前日期进行比较,如果匹配,请发送电子邮件。我知道我需要某种循环才能使它遍历该专栏,但我还没有走那么远。我尝试了所有可以在网上找到的方法,只是将其与日期比较一个单元格并发送电子邮件。 我在调整电子邮件功能以比较日期之前对其进行了测试,因此我知道它可以正常工作。放东西肯定不起作用...

function sendEmail() {
  //Fetch the date
  var removalDateRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expirations").getRange("E2");
  var removalDate = removalDateRange.getValue();
 
  var currentDateRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Alerts").getRange("C2");
  var currentDate = new Date();
  
  var ui = SpreadsheetApp.getUi();
  
      //Check Date
      if (removalDate == currentDate) {
        
          //Fetch the email address
          var emailRange =
           SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Alerts").getRange("B2");
           var emailAddress = emailRange.getValue();
        
         //Fetch Item Brand
         var itemBrandRange =
          SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expirations").getRange("B2");
          var itemBrand = itemBrandRange.getValue();
        
         //Fetch Item Name
         var itemNameRange =
          SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expirations").getRange("A2");
          var itemName = itemNameRange.getValue();
        
         //Fetch Item Location
         var itemLocationRange =
          SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expirations").getRange("H2");
          var itemLocation = itemLocationRange.getValue();
        
         // Send Alert Email
         var message = 'The ' + itemBrand + ' ' + itemName + ' in ' + itemLocation + ' will expire in 2 months. Please use and replace item.';
         
         // Second Column
         var subject = 'Pantry Alert';
            MailApp.sendEmail(emailAddress, subject, message);
    }
  }

编辑

好的,我昨晚让它工作了,甚至让它循环播放,不知何故我又把它弄坏了。数小时以来,我一直在寻找答案,以尝试调整其功能以使其正常工作。我在做什么错了?

function emailAlert() {
  
  // today's date information
  var today = new Date();
  var todayMonth = today.getMonth() + 1;
  var todayDay = today.getDate();
  var todayYear = today.getFullYear();

  // 2 months from now
  var oneMonthFromToday = new Date(todayYear, todayMonth, todayDay);
  var oneMonthMonth = oneMonthFromToday.getMonth() + 2;
  var oneMonthDay = oneMonthFromToday.getDate();
  var oneMonthYear = oneMonthFromToday.getYear();

  // getting data from spreadsheet
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Exp");
  var startRow = 2; // First row of data to process
  var numRows = 500; // Number of rows to process

  var dataRange = sheet.getRange(startRow, 1, numRows, 999);
  var data = dataRange.getValues();

  //looping through all of the rows
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];    
    
    
    var expireDateFormat = Utilities.formatDate(new Date(row[5]),
      'ET',
      'MM/dd/yyyy'
    );

    //email Information
    var subject = 'Pantry Item Needs Attention!';
    var message1 =
      row[6] + ' ' + row[3] + ' of ' + row[2] + ' ' + row[1] + ' will expire on ' + expireDateFormat + '. Item can be found in ' + row[7]
       + '. Please Remove and Replace Item.' + 
      '\n' + 'Thanks Steve!';
      
    var message2 =
      row[6] + ' ' + row[3] + ' of ' + row[2] + ' ' + row[1] + ' will expire on ' + expireDateFormat + '. Item can be found in ' + row[7] + 
      '. Please ensure item has been replaced, removed from the pantry, and deleted from inventory.' +
      '\n' + 'Thanks Steve!'

    //expiration date information
    var expireDateMonth = new Date(row[5]).getMonth() + 1;
    var expireDateDay = new Date(row[5]).getDate();
    var expireDateYear = new Date(row[5]).getYear();

    //checking for today
    if (
      expireDateMonth === todayMonth &&
      expireDateDay === todayDay &&
      expireDateYear === todayYear
    ) {
     
       ui.alert(message1);
    }
   }
  }

1 个答案:

答案 0 :(得分:2)

使用日期可能会令人沮丧,因此请考虑先使用整数完成整个操作(循环,如果则是语句...),如果遇到麻烦,然后返回日期部分。也就是说,请尝试将代码的顶部调整为如下所示:

var ss =SpreadsheetApp.getActiveSpreadsheet();
var removalDateVal = ss.getSheetByName("Expirations").getRange("E2").getValue();
var removalDate = new Date(removalDateVal);

var currentDateVal = ss.getSheetByName("Alerts").getRange("C2").getValue();
var currentDate = new Date(currentDateVal);

这将给您两个日期对象。但是要当心!这些日期既包含时间,又包含日历日期,因此即使看起来似乎也不相同。使用setHours()将日期归零,如下所示。

currentDate.setHours(0,0,0);
removalDate.setHours(0,0,0);

其他说明,最佳做法是为电子表格和工作表设置变量,如Google here所示。它使代码更具可读性。