Лучшие практики Google Scripts с двумя функциями

Я не уверен, что моя проблема здесь. У меня есть посетитель офиса, входящий / выходящий из таблицы Google. Вот как я пытаюсь заставить его работать. Когда посетитель устанавливает флажок в столбце "в", отметка времени будет отображаться в следующем столбце. Когда посетитель устанавливает флажок в столбце "out", отметка времени будет отображаться в следующем столбце. В настоящее время это работает так: когда у меня есть только первая функция в редакторе кода, отметка времени отображается в столбце 4 - как и положено. Когда я добавляю вторую функцию, отметка времени отображается в столбце 6, а не в столбце 4. Это похоже на то, что вторая функция переопределяет первую. Что бы исправить проблему?

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "SignInOut" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 3 ) { //checks the column
      var nextCell = r.offset(0, 1);
      if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue(new Date());
    }
  }
}

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "SignInOut" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 5 ) { //checks the column
      var nextCell = r.offset(0, 1);
      if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue(new Date());
    }
  }
}

1 ответ

Решение

Обе функции имеют одинаковое имя, поэтому он будет запускаться последним.

Возможно, вам не придется определять 2 раза одну и ту же функцию, попробуйте что-то вроде:

function onEdit(e) {
  var s = e.source.getActiveSheet(), r, colCell, nextCell;
  if(s.getName() === 'SignInOut') { //checks that we're on the correct sheet
    r = e.range; //s.getActiveCell();
    colCell = r.getColumn();
    if(colCell === 3 || colCell === 5) { //checks the column
      nextCell = r.offset(0, 1);
      if(nextCell.getValue() === '') //is empty?
        nextCell.setValue(new Date());
    }
  }
}
Другие вопросы по тегам