Итак, я работаю над сценарием Google Apps, который извлекает адрес электронной почты, тему и текст из файла таблицы Google. Эта информация используется для отправки электронного письма. Прямо сейчас в моем столбце «Тема» для файла Google Таблиц у меня стоит = СЕГОДНЯ (), так что дата вытаскивается. Мой сценарий обновляет этот столбец каждый день, поэтому дата всегда актуальна.
Проблема заключается в том, что когда приходит электронное письмо, в строке темы отображается «Сб, 11 августа 2018 г., 00:00:00 GMT-0700 (PDT)»
Вместо...
11.08.18 нравится его настройка в Google Таблицах
Не уверен, почему это могло быть, мой код ниже.
/**
* Creates a two time-driven triggers.
*/
function createTimeDrivenTriggers() {
// Trigger every 6 hours.
ScriptApp.newTrigger('adddate')
.timeBased()
.atHour(21)
.everyDays(1)
.inTimezone("America/Los_Angeles")
.create()
ScriptApp.newTrigger('sendEmails2')
.timeBased()
.atHour(22)
.everyDays(1)
.inTimezone("America/Los_Angeles")
.create()
}
/**
* This is my hacky way to make sure sheets has today's date.
*/
function adddate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell = sheet.getRange(2,2);
cell.setValue('=TODAY()');
}
// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'SUCCESSFULLY 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 = 2; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 3);
// 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[0]; // First column
var subject = row[1]; // Second column
var message = row[2]; // Third column
var emailSent = row[3]; // Fourth column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
Проблема, с которой вы сталкиваетесь, заключается в том, что ваша ячейка отформатирована как дата, и вы передаете ее как параметр, который ожидает строку. В этот момент вы больше не контролируете конверсию и получаете намного больше, чем хотели. Два способа решить эту проблему. 1) Сделайте это в первую очередь строкой с помощью
cell.setValue('=text(TODAY(),"mm/dd/yy"');
что действительно рискует испортить любую обработку даты, которую вы сначала выполняете (хотя я не вижу ничего, так что, вероятно, в порядке).
Так что, наверное, лучше (не 1, просто это)
2) состоит в том, чтобы получить отображаемую строку, оставив базовую дату, как у вас с var subject = row[1].getDisplayValue();
2) имеет дополнительное преимущество использования формата даты, для которого настроены листы.