Google Apps Script - отправлять только электронные письма в текущем году - PullRequest
0 голосов
/ 24 января 2020

В нашем колледже мы одалживаем Chromebook на время обучения здесь, мы довольно слабо связываемся со студентами, чтобы попросить их вернуться, поэтому после их отъезда мы, как правило, играем в догонялки и должны связаться с ними, чтобы вернуть их обратно. .

Продолжительность пребывания студентов варьируется от 1 до 3 лет. Я хочу создать журнал, где мы можем отслеживать этих студентов и какие устройства они берут на себя. Затем, за месяц до их отъезда, автоматически отправьте электронное письмо, в котором говорится, что им необходимо вернуть нам Chromebook.

В моем листе есть «Ожидаемая дата возвращения», в которую мы вводим только год, в котором они находятся. из-за отпуска, поскольку фактические данные об отпуске у каждого учащегося различаются в зависимости от их предметов. Идея состояла бы в том, что я бы установил триггер для запуска за день до того, как любой студент покинет колледж.

Я очень новичок в написании сценариев, но до сих пор я создал сценарий (с использованием большого количества Google поиск, копирование того, что я нашел в Интернете, и поиск), где он будет просматривать лист, найти любые строки данных без слов «EMAIL_SENT» в них и отправить электронное письмо. Если он показывает «EMAIL_SENT», он пропускает их. Когда я говорю, что я новичок, мне потребовалась неделя, чтобы добраться до этой точки.

Я добавлю триггеры, чтобы он запускался только один раз в год, однако я хочу, чтобы он отправлял электронные письма студентам. кто уйдет в этом году, в каком бы порядке они ни находились на листе. Можно ли заставить его позвонить в текущий год, найти ожидаемую дату возвращения и отправить только в том же году?

Мой сценарий ниже.

enter image description here

Надеюсь, это имеет смысл.

// This constant is written in column I for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';

/**
 * Sends non-duplicate emails with data from the current spreadsheet.
 */
function sendEmails2(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // first row of data to process
  var numRows = 1000; // number of rows to process
    // Fetch the range of cells A2:B4
  var dataRange = sheet.getRange(startRow, 1, sheet.getLastRow()-1,9);
    // Fetch values for each row in the Range.
  var data = dataRange.getValues ();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[3]; // fourth column
    var recipient = row[0]; // first column
    var asset = row[6]; // seventh column
    var loanDate = row [7] + ""; // seventh column
    var returnDate = row[8]; // ninth column
    var message = 'Hi ' + recipient + '. \n\n' + 'On ' + loanDate + ' you borrowed Chromebook ' + asset + ' from Learning Support. \n\n' + 'Since you are soon to leave the college, we require this Chromebook to be returned to the IT Office before the 30/06/' + returnDate + '. \n\n' + 'Kind regards,\n\n' + 'IT Services';
    var emailSent = row[2]; // third column
    if (emailSent !=EMAIL_SENT) { //prevents sending duplicates
      var subject = 'Chromebook Loan';
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      sheet.getRange(startRow + i, 10).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

1 Ответ

0 голосов
/ 24 января 2020

Вы должны просто добавить переменную, которая получает текущий год, а затем добавить новое условие в ваш if, который проверяет их два.

Итак, новая переменная:

var yearNow = newDate.getFullYear();

И if:

if (emailSent !=EMAIL_SENT && returnDate == yearNow)

Для добавления триггера, который будет запускаться раз в год, вы можете использовать следующую функцию:

function createTheTrigger() {
  ScriptApp.newTrigger('sendEmails2')
      .timeBased()
      .everyWeeks(52)
      .create();
}

Приведенная выше функция создает триггер, который будет запускаться каждые 52 недели , что составляет приблизительно 1 год .

Кроме того, я предлагаю вам проверить следующие ссылки, поскольку они могут помочь:

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