Сценарий отметки времени в Google листов не обновляется при удалении или обновлении диапазона ячеек

1

Это моя первая публикация, поэтому я надеюсь, что я сделал все правильно :)

Я реализовал сценарий в листах google, который создает метку времени в столбце B, когда ячейка редактируется в этой строке.

Он отлично работает, за исключением:

  1. когда я выбираю диапазон ячеек и нажимаю "delete", обновляется только одно из временных меток (временная метка активной ячейки), хотя я модифицировал несколько ячеек
  2. Если я перетаскиваю вниз, чтобы автоматически заполнять значения из одной ячейки вниз в несколько ячеек (например, если я перетаскиваю от A1 до A5, чтобы заполнить A2-A5 значением, которое было в A1), тогда только первая временная метка (например, A2), а остальные остаются такими, какими они были.

Любые идеи по устранению этих проблем?

Здесь мой код

function onEdit(e) {
  var s = SpreadsheetApp.getActiveSheet();
  var r = s.getActiveCell();
  if( r.getColumn() != 2 && e.source.getActiveSheet().getName() === "MySheet") { //checks the column & checks the sheet is the correct one
    var row = r.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT+10:00", "dd/MM/yyyy HH:mm:ss");
    SpreadsheetApp.getActiveSheet().getRange('B' + row.toString()).setValue(time);
  };
 };

И вот пример таблицы, в которой есть код:

https://docs.google.com/a/eventsafetyservices.com.au/spreadsheets/d/1hFtS-diq_8QsWwqFTIlHg8zHxpvVUsDZex0nSuvXizg/edit?usp=sharing

Теги:
timestamp
google-api
google-sheets

1 ответ

0
Лучший ответ

Обычно полезно использовать объект события для всего, что связано с этим действием.

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

function onEdit(e) {
  var r = e.range;

  if(r.getColumn() !== 2 && r.getSheet().getName() === "MySheet") {
    var row = r.getRow();
    var lastRow = r.getLastRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT+10:00", "dd/MM/yyyy HH:mm:ss");

    r.getSheet().getRange(row, 2, lastRow - row + 1, 1).setValue(time);
  };
 };
  • 0
    Большое спасибо за это! Это решает это. Я довольно плохо знаком с javascript, и особенно плохо знаком с javascript на страницах Google. Не могли бы вы объяснить немного больше о том, что такое e.range и почему он это решил, чтобы я мог понять?
  • 0
    Параметр e в onEdit является объектом события. Объекты событий несут свойства, такие как новое значение, старое значение и отредактированный диапазон. Вы могли бы решить это с помощью getActiveRange но это может измениться между onEdit и getActiveRange функцией getActiveRange , если вы работаете быстро. Вы можете прочитать больше об объектах событий здесь
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню