#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();
}
}
}
Вероятно, вам придется изменить формат дат.