0

我不确定我的问题是什么。我有一个办公室访客登录/注销 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());
    }
  }
}
4

1 回答 1

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());
    }
  }
}
于 2013-10-27T04:10:29.973 回答