在 Google 工作表中每第 4 列重复一次的时间戳

Timestamp to repeat every 4th column in Google Sheets

我需要我的团队在 A 列中输入他们的名字,在 B 列中输入 LOGIN 或 LOGOUT,我需要在 C 列中输入登录时间戳,在 D 列中输入注销时间戳。我需要重复 30 天(一个月) ) 在每个 sheet 中,这意味着 B、C 和 D 列将在 sheet 中重复 30 次。

名称 - LOGIN/LOGOUT - 登录时间戳 - 登出时间戳

我在 YouTube 上找到了这段代码(略微调整),它在第 2 列和第 3 列中创建了两个时间戳,当第 1 列更新时,第二个更新到新时间,而第一个保持不变。我计划通过在用户输入 LOGIN 时隐藏第二个时间戳(使用条件格式)来使用它,然后在用户输入 LOGOUT 时取消隐藏它。但是,我不知道如何在随后的日子里每隔 4 列调用一次此脚本。我花了将近一整天的时间来解决这个问题,但我的脚本知识非常有限。任何帮助是极大的赞赏。非常感谢。

function onEdit(e) {

  var row = e.range.getRow();
  var col = e.range.getColumn();

  if(col === 1 && row >= 1 && e.source.getActiveSheet().getName() === "Test"){

  var currentDate = new Date();
  e.source.getActiveSheet().getRange(row,3).setValue(currentDate);
  if(e.source.getActiveSheet().getRange(row,2).getValue() == ""){
  e.source.getActiveSheet().getRange(row,2).setValue(currentDate);
  }
 }
}

答案:

  1. 获取已编辑的单元格。
  2. 检查单元格的列是否在带有 % 运算符的 Login/Logout 列中。
  3. 如果编辑单元格右侧的单元格为空,请输入日期。否则,在右侧两个单元格中输入日期。

代码:

function onEdit(e) {  
  var row = e.range.getRow();
  var col = e.range.getColumn();  
  var curRow = e.source.getActiveSheet().getRange(row + ':' + row).getValues();

  var sheetNames = ['Put', 'your', 'sheet', 'names', 'here', '...', 'etc']

  if (!sheetNames.includes(e.source.getActiveSheet().getName())) {
    return;
  }
    
  if((col + 1) % 3 === 0 && row >= 1) {
    var currentDate = new Date();
    if (e.source.getActiveSheet().getRange(row, col + 1).isBlank()) {
      e.source.getActiveSheet().getRange(row, col + 1).setValue(currentDate);
    }
    else {
      e.source.getActiveSheet().getRange(row, col + 2).setValue(currentDate);
    }
  }
}

参考: