Скрипт Google Apps использует неправильный формат даты в excel

Итак, я работаю над сценарием 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();
    }
  }
}
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python - это удобный способ автоматизировать процесс отправки электронных писем. Это может быть полезно для...
0
0
35
1

Ответы 1

Проблема, с которой вы сталкиваетесь, заключается в том, что ваша ячейка отформатирована как дата, и вы передаете ее как параметр, который ожидает строку. В этот момент вы больше не контролируете конверсию и получаете намного больше, чем хотели. Два способа решить эту проблему. 1) Сделайте это в первую очередь строкой с помощью

cell.setValue('=text(TODAY(),"mm/dd/yy"');

что действительно рискует испортить любую обработку даты, которую вы сначала выполняете (хотя я не вижу ничего, так что, вероятно, в порядке).

Так что, наверное, лучше (не 1, просто это) 2) состоит в том, чтобы получить отображаемую строку, оставив базовую дату, как у вас с var subject = row[1].getDisplayValue(); 2) имеет дополнительное преимущество использования формата даты, для которого настроены листы.

Другие вопросы по теме