Google Scripts: onEdit неактивного листа? - PullRequest
0 голосов
/ 21 марта 2019

На листе 1 есть кнопка отправки, которая запускает сценарий и перемещает данные в лист 2.

Я «отмечаю время» при перемещении (при определенных условиях, чтобы предотвратить перезапись и бессмысленные отметки времени), однако стекущий сценарий -

Проблема (1): onEdit выполняется только в том случае, если я вручную выполняю редактирование для sheet2 (= sheet2 активен).

РЕШЕНО!(См. Комментарии). Проблема (2): onEdit не ограничивается sheet2, а также будет происходить и на sheet1.

function onEdit() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
    if( sheet.getName() == "sheet2" ) {
        var activecell = sheet.getActiveCell();
        if( activecell.getColumn() == 2 ) {
            var pastecell = activecell.offset(0, -1);
            if( pastecell.getValue() === '' & activecell.getValue() != '' )
                pastecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');
        }
    }
}

Кто-нибудь знает, как это исправить двумя?

Ваша помощь ипонимание высоко ценится!

1 Ответ

0 голосов
/ 21 марта 2019

Таким образом, после прочтения?‍♀️ и @tehhowch вы увидите следующее:

https://developers.google.com/apps-script/guides/triggers/

Выполнения сценариев и запросы API не вызывают запуск триггеров.Например, вызов Range.setValue () для редактирования ячейки не приводит к запуску триггера onEdit электронной таблицы.

Разрешается простым запуском отметки времени в исходной функции перемещения, например так: *

function move() {

  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  var source_range = source.getRange(3, 15, 1, 6).getValues();

  var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
  var target_range = target.getRange(target.getLastRow() + 1, 2, 1, 6);

  target_range.setValues(source_range);

  var datecell = target_range.offset(0, -1, 1, 1);

  datecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');

  var clearsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  clearsheet.getRange("J3:K4").clearContent();
  clearsheet.getRange("B8:B25").clearContent();
  clearsheet.getRange("H8:H9").clearContent();
  clearsheet.getRange("H11").clearContent();
  clearsheet.getRange("O7:P16").clearContent();

}

Иногда нужно просто думать вслух.Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...