Как создать метку времени только при первом редактировании столбцов - PullRequest
0 голосов
/ 12 июня 2019

У меня есть лист с определенным количеством столбцов и метка времени, выделенная для первого столбца.Мой код работает, но обновляется каждый раз, и я бы хотел, чтобы он обновлялся только при первом редактировании.

Я попытался добавить код, который я нашел, но безуспешно.

function onEdit(e) {

var s = e.source.getActiveSheet(),
    cols = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    colStamp = 1,
    ind = cols.indexOf(e.range.columnStart)
    if (s.getName() !== 'Feedback' || ind == -1) return;
e.range.offset(0, parseInt(colStamp - cols[ind]))
    .setValue(e.value ? new Date() : null);} 
{ if (e.range.offset(0, parseInt(colStamp - cols[ind])).getValue() === '') 
{ e.range.offset(0, parseInt(colStamp - cols[ind])).setValue(e.value ? new Date() : null);}}

У меня нет сообщения об ошибке, последняя часть кода, когда активен, делает весь код нехотя работает.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

извините за поздний ответ!

Большое спасибо за ответ и объяснения, кажется, что он работает довольно хорошо.

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

Ура!

0 голосов
/ 12 июня 2019

Требования:

Добавить метку времени в ячейку при первом редактировании этой строки.


Решение:

Используйте onEdit(e) простой триггер вместе с оператором if, чтобы убедиться, что столбец метки времени пуст перед установкой значения даты.


Пример:

function onEdit(e) {
  var sh = e.source.getActiveSheet();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var stampCol = sh.getRange(row, 1);

  //check if "stampCol" is empty      
  if (!stampCol.getValue()) {
    var tz = e.source.getSpreadsheetTimeZone();
    var date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy hh:mm:ss');
    stampCol.setValue(date); //set timestamp
  }
}

Пояснение:

Я определил var stampCol как столбец 1 для той же строки, которая редактируется. Затем оператор if проверяет, является ли stampCol пустым, если это так, то он будет отмечать время строки. Проверяя, является ли stampCol пустым, он останавливает сценарий от записи временных меток в эту строку при каждом редактировании, потому что он будет пустым только при первом запуске.

Затем, используя Utilities.formatDate() Я создал метку времени в формате, определенном в сценарии, вы можете изменить его так, как вы хотите, чтобы он отображался. В настоящее время он использует часовой пояс электронной таблицы с var tz, вы также можете изменить его, чтобы использовать предпочтительный часовой пояс.

Вот некоторые параметры часового пояса в Google Apps Script:

//use spreadsheet timezone setting
var tz = e.source.getSpreadsheetTimeZone();

//use script timezone setting
var tz = Session.getScriptTimeZone();

//enter your own time zone
var tz = 'GMT+0';

Ссылки:

  1. Simple Документация по триггерам
  2. Время Зоны
  3. Форматы даты
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...