最佳实践Google Scripts具有两个功能

时间:2013-10-27 00:16:46

标签: google-apps-script google-sheets google-apps

我不确定我的问题在这里。我有办公室访客登录/退出Google电子表格。这就是我试图让它发挥作用的方式。当访问者在“in”列中选中一个复选框时,时间戳将显示在下一列中。当访问者在“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 个答案:

答案 0 :(得分: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());
    }
  }
}