Как настроить автоматическое напоминание по электронной почте в Google Sheet - PullRequest
0 голосов
/ 08 февраля 2020

Я перепрофилировал этот Google Лист со скриптом, связанным ниже:

https://docs.google.com/spreadsheets/d/1z1EfLPYRze0zWnk729ChCf_kOY-JPEV9dvjCbXHNZDc/edit?usp=sharing

Кто-то ранее поделился этим, и я попытался настроить его для своих нужд , Он отлично работает для отправки напоминаний по электронной почте, когда «Дата отправки» становится действующей. Есть кое-что, что мне нужно сделать, но я не могу понять, потому что у меня нет опыта работы со скриптами / кодом.

Я хотел бы написать скрипт, который нужно добавить в мой текущий Сценарий выполняет следующие действия:

Когда сценарий запускается на листе ежедневно на основе триггера и рассылает напоминания по электронной почте для указанных c строк - он должен обновить столбец 1 этих строк с новой датой, существенно опережая существующие дата по количеству дней в столбце 5 (Дни до следующего напоминания). ((Например, в строке 6 дата 7 февраля 2020 г. - после создания напоминания по электронной почте - к 7 февраля необходимо добавить 180 дней (данные 5 столбца) и обновить 1 столбец с новой датой 5 августа 2020 г .; поэтому лист готов затем отправить следующее напоминание. Если в столбце 5 указано 0-, то он не должен обновлять эту дату и просто оставить строку такой, какая она есть.

И одновременно в столбце 6 - должно обновляться не только «электронная почта отправлена» но с добавленной информацией «в этот день», которая является датой отправки электронного письма.

И, наконец, лист должен быть отсортирован с - самой последней и самой высокой датой в столбцах столбца 1 - сверху и наименьшей датой в внизу.

Я придумал этот дополнительный код, но поскольку я не знаю никакого синтаксиса, он не работает:

 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //Get the dates from the cell and convert them into Milliseconds since 1970/01/01
  var First = new Date(ss.getRange(row[1]).getValue().getTime();
  var dayInMs = 24*60*60*1000    //one day in Milliseconds
  //add row days to each date in milliseconds
  First = First + ((row[4])*dayInMs)
        //Convert Milliseconds to date use new Date(time in ms) and set Values of the cell
  ss.getRange(row[1]).setValue(new Date(First));

Как мне продолжить?

1 Ответ

0 голосов
/ 08 февраля 2020

Вот как добавить 180 дней к дате в ячейке:

function myFunction() {
  var data = SpreadsheetApp.getActive().getActiveSheet().getDataRange().getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var car = row[1];
    var date = new Date(row[2]); // make the sheet value a date object
    Logger.log('original value = '+date);
    Logger.log('method 1 : '+new Date(date.getTime()+180*3600000*24));
    Logger.log('method 2 : '+new Date(date.setDate(date.getDate()+180)));
  }
}

См. Скрипт Google App Добавление одного дня к дате

Следующее Вопрос прост:

"Email Sent On " + Utilities.formatDate(dt,"GMT", "dd-MM-yy")

Третий вопрос

var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var range = sheet.getRange("A1:C7");

 // Sorts by the values in the first column (A)
 range.sort(1);

 // Sorts by the values in the second column (B)
 range.sort(2);

 // Sorts descending by column B
 range.sort({column: 2, ascending: false});

 // Sorts descending by column B, then ascending by column A
 // Note the use of an array
 range.sort([{column: 2, ascending: false}, {column: 1, ascending: true}]);

 // For rows that are sorted in ascending order, the "ascending" parameter is
 // optional, and just an integer with the column can be used instead. Note that
 // in general, keeping the sort specification consistent results in more readable
 // code. We could have expressed the earlier sort as:
 range.sort([{column: 2, ascending: false}, 1]);

 // Alternatively, if we wanted all columns to be in ascending order, we would use
 // the following (this would make column 2 ascending)
 range.sort([2, 1]);
 // ... which is equivalent to
 range.sort([{column: 2, ascending: true}, {column: 1, ascending: true}]);

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