【问题标题】:Google Script - Extract row data from spreadsheet only if the day equal todayGoogle Script - 仅当当天等于今天时才从电子表格中提取行数据
【发布时间】:2016-11-29 18:57:02
【问题描述】:

情况:
我有以下脚本,向我发送一封包含已关闭票的电子邮件#。

问题:

此脚本向我发送任何截止日期的所有已关闭票证。我需要你只寄给我当天的封闭票。

关闭日期列的日期格式为 "29/11/2016 12:34:00"

  function emailv2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Support = ss.getSheetByName("Historic");
  var lastrow = Support.getLastRow();

  var data1 = Support.getRange(3, 1, lastrow).getValues(); // Ticket# Column
  var data2 = Support.getRange(3, 2, lastrow).getValues(); // Comment Column
  var data3 = Support.getRange(3, 3, lastrow).getValues(); // Status Column
  var data4 = Support.getRange(3, 9, lastrow).getValues(); // Close Date Column

  var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm"); // Funtion Date + Format

  var report = " "
  var supportTable ="";
  for(var i in data3){
    if(data3[i]=='Closed') supportTable += "<tr><td style='color:blue;padding:5px'>" + "<a href=http://otrserver/otrs/index.pl?Action=AgentTicketZoom;TicketNumber="+data1[i]+">"+data1[i]+"</a>" 
                                      + "</td><td style='padding:5px'>" + data2[i] 
                                      + "</td><td style='padding:5px'>" + data3[i] 
                                      + "</td></tr>";
  }

  report ="Estimados: <br><br> Les envio el shift <br><br><table style='border-collapse:collapse;'border = 1 cellpadding = 5; align='center'><tr><th style='background-color:black;color:white'>Ticket#</th><th style='background-color:black;color:white'>Comment</th><th style='background-color:black;color:white'>Status</tr>" + supportTable + "</table>";

  MailApp.sendEmail("example@gmail.com",
                    "Shift Change -" + date, 
                    report, 
                    {name: 'Automatic Emailer Script',
                    htmlBody: report});
}

【问题讨论】:

    标签: javascript date google-apps-script google-sheets


    【解决方案1】:

    我添加了一个函数来测试日期并编辑了 if 语句来使用它:

    function emailv2() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var Support = ss.getSheetByName("Historic");
      var lastrow = Support.getLastRow();
    
      var data1 = Support.getRange(3, 1, lastrow).getValues(); // Ticket# Column
      var data2 = Support.getRange(3, 2, lastrow).getValues(); // Comment Column
      var data3 = Support.getRange(3, 3, lastrow).getValues(); // Status Column
      var data4 = Support.getRange(3, 9, lastrow).getValues(); // Close Date Column
    
      var date = new Date()
    
      var report = " "
      var supportTable ="";
      for(var i in data3){
        if((data3[i]=='Closed') && (testDate(data4[i][0], date))) supportTable += "<tr><td style='color:blue;padding:5px'>" + "<a href=http://drsc.nubicua.net/otrs/index.pl?Action=AgentTicketZoom;TicketNumber="+data1[i]+">"+data1[i]+"</a>" 
                                          + "</td><td style='padding:5px'>" + data2[i] 
                                          + "</td><td style='padding:5px'>" + data3[i] 
                                          + "</td></tr>";
    
      }
    
      report ="Estimados: <br><br> Les envio el shift <br><br><table style='border-collapse:collapse;'border = 1 cellpadding = 5; align='center'><tr><th style='background-color:black;color:white'>Ticket#</th><th style='background-color:black;color:white'>Comment</th><th style='background-color:black;color:white'>Status</tr>" + supportTable + "</table>";
    
      MailApp.sendEmail("example@gmail.com",
                        "Shift Change -" + date, 
                        report, 
                        {name: 'Automatic Emailer Script',
                        htmlBody: report});
    }
    
    function testDate (dateToTest1,dateToTest2) {
        return (dateToTest1.getFullYear() === dateToTest2.getFullYear()) &&
               (dateToTest1.getMonth() === dateToTest2.getMonth()) &&
               (dateToTest1.getDate() == dateToTest2.getDate());
    }
    

    旧响应

    更改您的 IF 以同时比较日期。如果两者都是日期,则将它们格式化为仅日期而不是时间

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy"); // Function Date + Format
    

    然后将 If 更改为:

    if((data3[i]=='Closed') && (date === data4))
    

    请注意,这是未经测试的,因为我没有您的电子表格副本,但应该可以为您提供所需的内容。

    【讨论】:

    • 嗨,暂时不工作,不显示任何行。 Example Spreadsheet - 脚本是电子邮件 > EmailV2
    • 太棒了...现在正在工作...我认为是格式问题...非常感谢
    • 我为 Open case 复制了这段代码,但是当我运行它时得到错误 getfullyear not found
    • @LADServiceDesk 确保将日期传递给 testDate 函数。如果传递的值不是日期类型,而是字符串,则会发生该错误。
    • 我的意思是,在关闭日期工作的情况下运行它时......但是当我尝试在打开的情况下运行时不起作用。 “TypeError: No se puede encontrar la función getFullYear en el objeto”的意思是找不到函数 getFullYear。我也将格式手动应用于所有单元格,但没有奏效。与关闭日期列的格式相同
    【解决方案2】:

    由于电子表格以日期格式存储值,您可以使用简单的日期方法将存储的日期与今天的日期进行比较,而不是将它们转换为字符串。

      var today = new Date();
      today.setHours(0,0,0,0);
    
      var status = Support.getRange(3, 3, lastrow).getValue(); // Status Column
      var closed = Support.getRange(3, 9, lastrow).getValue(); // Close Date Column
      closed.setHours(0,0,0,0);
    
      if ((status === "CLOSED") && (today - closed === 0))
        // do processing
    

    【讨论】:

    • 暂时不工作返回错误与格式化日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多