【问题标题】:Timestamp to repeat every 4th column in Google Sheets在 Google 表格中每 4 列重复一次的时间戳
【发布时间】:2020-03-31 12:31:47
【问题描述】:

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

名称 - LOGIN/LOGOUT - LOGIN-Timestamp - LOGOUT-Timestamp

我在 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);
  }
 }
}

【问题讨论】:

  • 根据您的示例,看起来触发列是“LOGIN/LOGOUT”,这是 second 列(不是第 1 列),因此时间戳将在列中3 & 4. 你能澄清一下吗?
  • 当用户“登录”/“注销”时,是否总是在编辑第 2 列?
  • 是的。第 2 列中的第一个输入将在 3 和 4 中添加时间时间戳。第 2 列中的任何更新都会更新 4 中的时间戳。
  • @ANIPON 所以,如果第 4 列被编辑,您只想采取不同的行动?
  • 我想要 3 和 4 中的时间戳。当 2 获得 LOGIN 时,3 必须收到时间戳,当 2 获得 LOGOUT 时,4 必须获得时间戳。由于我不懂脚本,所以我试图使用我在网上找到的东西。谢谢。

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


【解决方案1】:

答案:

  1. 获取已编辑的单元格。
  2. 使用% 运算符检查单元格的列是否在登录/注销列中。
  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);
    }
  }
}

参考:

【讨论】:

  • 谢谢拉法。它仍然只适用于第一组列。例如,在 Col 2 中添加输入值时,时间戳会出现在 3 中,当我更改该值时,时间戳会出现在 4 中。但是当我在 col 5 中添加输入值时,时间戳不会出现在 6 和 7 中。对不起,我是不是做得不对。
  • 奇怪了,你复制+粘贴新脚本保存了吗?它应该会自动找到下一个空闲列并对其进行更新。你碰巧有任何可安装的触发器吗?或者两个onEdit() 函数?
  • 不,这是新的工作表,还没有其他脚本。为了确定,我会再试一次。谢谢。
  • 不,它仍然不起作用。同时,我发现 Vinit 的其他代码可以按我想要的方式在多个列中工作,但每次编辑只添加一个时间戳,而不是两个。 stackoverflow.com/questions/11458470/…
猜你喜欢
  • 2019-08-24
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2021-08-06
  • 2022-07-12
  • 2019-10-01
  • 2020-12-27
  • 2020-04-06
相关资源
最近更新 更多