Попытка сопоставить дату в таблице с сегодняшней датой и отправить электронное письмо - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть электронная таблица, которая выглядит следующим образом:

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, файл "Код")

Я узнал о функциях даты что я написал здесь в этом ответе { ссылка }

Как правильно это сделать?

Редактировать: Добавлено то, что предложил Майкл. Существует еще одна ошибка, показанная ниже:

ReferenceError: сегодня не определено (строка 12, файл "Код")

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Я решил проблему. Я сделал следующее:
1. Очистил столбец даты, переформатировал его как дату. И снова введите дату в соответствии с форматом даты в столбце.
2. Модифицированная часть даты, как было предложено Майклом Пирсоном.
3. «Сегодня» стало объектом, как показано ниже:

var today = new Date();
Сначала я ошибался. Почтовая часть кода помещается внутри самого l oop. Вот код:
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;
            }
    }
}


Спасибо за предложения.

0 голосов
/ 13 апреля 2020

dateIter ссылается на ячейку и поэтому не имеет функции getDate ().

Если ячейка содержит строковое значение, вы можете сделать что-то вроде:

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

et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...