Есть ли способ использовать скрипт для извлечения даты из отправки формы Google из sheets в Gmail?

#datetime #google-apps-script #google-sheets #gmail #google-forms

#datetime #google-apps-script #google-sheets #gmail #google-forms

Вопрос:

У меня нет опыта написания скриптов, но я смог найти скрипт и отредактировать его (с большим количеством проб и ошибок) в соответствии с моими потребностями.

У меня есть форма Google, где первый вопрос позволяет пользователям выбирать дату, но это не обязательно дата, когда пользователи заполняют форму. Результаты экспортируются в таблицу Google, и у меня есть скрипт, который отправляет электронное письмо с ответами формы.

Это прекрасно работало до перехода на летнее время. Теперь даты в электронной таблице указаны правильно, но в электронных письмах они на один день меньше.

Пример сообщения электронной почты:

Ваш ребенок, ИМЯ, получил нарушение дресс-кода 27 марта 2019 года в 23:00:00 GMT-0600 (CST) без удостоверения личности.

До перехода на летнее время время отображалось как 00:00:00 .

В коде строка [2] — это дата, извлеченная из электронной таблицы.

 var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Script");
var startRow = 2;
var numRows = 5000;
var dataRange = sheet.getRange(startRow, 1, numRows, 5000)
var data = dataRange.getValues();
for (var i = 0; i < data.length;   i) {
var row = data[i];
var emailAddress = row[12];
var message = "Your child, "   row[10]   ", received a dress code violation on "   row[2]   ", for "   row[11]   ".nIf you have any questions, please email NAME at name.name@name.orgnnThank you,nnNAMEnAssistant Principal";
var emailSent = row[13];
if (emailSent != EMAIL_SENT) {
var subject = "Uniform Violation - Do Not Reply";
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow   i, 14).setValue(EMAIL_SENT);
SpreadsheetApp.flush();
    } 
  }
 }
  

В идеале, в электронном письме должна быть указана дата точно из электронной таблицы в MM/DD/YYYY формате.

Вместо этого электронные письма показывают предыдущий день со временем 11 часов вечера.

Комментарии:

1. Совпадает ли часовой пояс для скрипта и электронной таблицы?

Ответ №1:

Попробуйте это:

 var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var ss=SpreadsheetApp.getActive();//added this
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Script");
  var startRow = 2;
  var numRows = 5000;
  var dataRange = sheet.getRange(startRow, 1, numRows, 5000)
  var data = dataRange.getValues();
  for (var i = 0; i < data.length;   i) {
    var row = data[i];
    var emailAddress = row[12];
    var message = "Your child, "   row[10]   ", received a dress code violation on "   Utilities.formatDate(new Date(row[2]),ss.getSpreadsheetTimeZone(), "MM dd, yyyy HH:mm:ss" )   ", for "   row[11]   ".nIf you have any questions, please email NAME at name.name@name.orgnnThank you,nnNAMEnAssistant Principal";//modified this
    var emailSent = row[13];
    if (emailSent != EMAIL_SENT) {
      var subject = "Uniform Violation - Do Not Reply";
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow   i, 14).setValue(EMAIL_SENT);
      SpreadsheetApp.flush();
    } 
  }
}
  

Вероятно, вам придется изменить формат дат.