добавить строку с датой в Google Sheet с помощью скриптов Google Apps и сохранить форматирование даты, указанное в листах - PullRequest
1 голос
/ 07 июня 2019

У меня есть столбец на моем листе с пользовательским форматом даты.Формат устанавливается на весь столбец.Если поместить значение даты в столбце изнутри листов, оно отобразится в формате, указанном мной.Но если я добавлю новую строку с помощью скриптов Google Apps, она не будет соответствовать форматированию.

Перед добавлением строки через скрипт Google Apps:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |

После добавления строки:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |
|         1/2/2019 14:51:31 | test2   |

Код скрипта Google Apps для добавления строки:

SpreadsheetApp.getActiveSheet().appendRow([new Date(), "test2"])

Есть ли способ получить добавляемую дату таким образом, чтобы листы форматировали ее в соответствии с правилом форматирования?

Единственный способ, который я нашел, - это преобразовать данные в целое число, представляющее количество дней с 1899-12-30, но это выглядит очень странно.

var dateSerial = ((new Date()) - (new Date(1899, 11, 30))) / 1000 / 60 / 60 / 24;

1 Ответ

1 голос
/ 07 июня 2019

Как упомянул @Cooper в своем комментарии, вы можете достичь этого с помощью Utilities.formatDate().

Я протестировал с помощью приведенного ниже сценария, и формат даты получился именно таким, как вы хотите.

function addDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var tz = ss.getSpreadsheetTimeZone();
  var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');
  sh.appendRow([d,'test']);
}

Все, что вам действительно нужно, это var d, где указана дата.Для этого я использовал часовой пояс электронной таблицы, но вы можете использовать любой часовой пояс.

var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');

Редактировать:

Пользователь не хочет устанавливать формат датыв самом скрипте вместо этого мы можем взять формат чисел из вышеприведенного столбца, используя getNumberFormat(), а затем отформатировать новую запись на основе этого, используя setNumberFormat().

Подробнее см. скрипт ниже.

function setDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var lr = sh.getLastRow();

  //get format for last row in column A
  var format = sh.getRange(lr, 1).getNumberFormat();

  //add new data to sheet
  sh.appendRow([new Date(), 'test']);

  //format new data
  sh.getRange(lr+1, 1).setNumberFormat(format);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...