尝试将电子表格中的日期与今天的日期进行匹配并发送电子邮件

时间:2020-04-13 16:11:18

标签: google-apps-script google-sheets

我有一个电子表格,看起来像这样:

Date     |  Day  |  S1   | S2   |  S3   |  S4   |   S5   |  S6  |
-----------------------------------------------------------------       
14/04/20 |  Sun  |  P-1  | H-1  | E-1   | R-1   |  F-1   |  G-1 |
15/04/20 |  Mon  |  P-1  | H-1  | E-3   | R-1   |  F-2   |  G-2 |

目的是向该电子邮件发送该特定日期的时间表(S1至S6)。 该脚本将在一天的特定时间运行。它将今天的日期与第一列中的日期进行比较。如果日期匹配,则该行上的数据应发送到我的电子邮件地址。

我写了如下代码:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 4; //the date starts from the fourth row
  var numRows = 170; //there are a total of 170 rows

  var dataRange = sheet.getRange(startRow, 1, numRows, 8);
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var dateIter = row[0];
     if (dateIter.getDate() == today.getDate() && 
        dateIter.getMonth() == today.getMonth() && 
          dateIter.getFullYear() == today.getFullYear()) {
            var sub1 = row[2];
            var sub2 = row[3];
            var sub3 = row[4];
            var sub4 = row[5];
            var sub5 = row[6];
            var sub6 = row[7];
            var subject = 'Things you have to study today';
            var message = "You have to study today" + sub1 + ", " + sub2 + ", " + sub3 + ", " + sub4 + ", " + sub5 + ", and " + sub6 + ". All the best." ;
            break;
          }
  }
  var emailAddress = 'myemail goes here';
    MailApp.sendEmail(emailAddress, subject, message);
}

我不确定我在代码中写的日期函​​数。我收到如下错误:

TypeError:dateIter.getDate不是函数(第11行,文件“代码”)

我了解了我在此答案https://stackoverflow.com/a/14351783/9422511

中在此处编写的日期函​​数。

正确的做法是什么?

编辑: 添加了迈克尔的建议。还有另一个错误,如下所示:

ReferenceError:今天未定义(第12行,文件“代码”)

2 个答案:

答案 0 :(得分:1)

我已经解决了问题。我做了以下事情:
1.清除日期列,将其重新设置为日期格式。然后根据列中的日期格式再次输入日期。
2.修改了迈克尔·皮尔森(Michael Pearson)建议的日期部分。
3.“今天”已成为一个对象,如下所示:

var today = new Date();
  1. 我一开始做错了。代码的邮件部分放在循环本身内。 这是代码:
function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 4; 
  var numRows = 170; 

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

  for (var i in data) {
    var row = data[i];
    var dateIter = row[0];   
    var date = new Date(dateIter);    
    var today = new Date();  

     if (date.getDate() == today.getDate() && 
        date.getMonth() == today.getMonth() && 
          date.getFullYear() == today.getFullYear()) {
            var sub1 = row[2];
            var sub2 = row[3];
            var sub3 = row[4];
            var sub4 = row[5];
            var sub5 = row[6];
            var sub6 = row[7];
            var subject = 'Things you have to study today';
            var message = "You have to study today" + sub1 + ", " + sub2 + ", " + sub3 + ", " + sub4 + ", " + sub5 + ", and " + sub6 + ". All the best." ;
            var emailAddress = 'email goes here';
            MailApp.sendEmail(emailAddress, subject, message);
            break;
            }
    }
}


感谢您的建议。

答案 1 :(得分:0)

dateIter引用一个单元格,因此没有getDate()函数。

如果单元格包含字符串值,则可以执行以下操作:

var date = new Date(row[0]);
if (date == today.getDate()