在一个单元格中保存时间戳时间,然后在另一个单元格中保存时间戳编辑时间

问题描述 投票:0回答:1

我有一个 Google 表单,让学生在离开课堂时输入信息。 H 列是以下两项之一:“离开课堂”或“返回课堂”。我想创建两列:Time Out 和 Time In(通过公式或脚本),根据 H 的值设置单元格的值。当学生“离开课堂”时,我希望在 Time 中设置时间戳时间出而不变。当学生编辑表单并将其更改为“返回课堂”时,我想要一个时间列来设置时间戳时间。

我尝试使用B2中的公式来捕获时间:

=if($H2="Leaving Class",time(HOUR(A2),minute(A2),second(A2)),"")

但是当编辑导致时间戳发生变化时,情况就会发生变化。我的猜测是,我需要使用该公式来捕获时间,使用 onedit 脚本,然后将相邻单元格 (C2) 的值设置为 B2 的值,然后当时间戳编辑时,单元格 D2 将捕获来自时间戳和单元格 E2 将是另一个脚本的设置值。然后,我可以使用这些值来确定学生离开了多长时间。

我会隐藏 B 列和 D 列。这是回复表的图片。

我认为需要某种编辑变量,在行创建时设置为“原始”,并设置 C2 时间,然后将变量更改为“编辑”,这将编辑 E2 时间但不会更改 C2时间。

表格结果电子表格: Spreadsheet of form results

这就是我想要的:

输入 输出
创建表格条目,单元格 h2 =“离开班级”,例如学生离开班级去洗手间 单元格 C2 自动更新时间戳中的时间并被锁定,因此它不会更改(本质上是时间的“值”)
学生返回时表格会更新,h2 变为“返回课堂” C2 单元保持原样。单元格 E2 现在变为编辑后的时间戳的时间,因此 C2 是他们离开房间的时间,E2 是他们返回的时间。

我尝试了一个公式,但它不会复制值并锁定单元格。我已经有一段时间没有从事脚本工作了,但了解基础知识。

google-sheets google-apps-script timestamp
1个回答
0
投票

使用 onFormSubmit 和 helperColumn

您可以尝试这个脚本,它应该可以满足您的需求。

代码:

function onFormSubmit(e) {
  var sh = SpreadsheetApp.openById("1k0yZ22Qt_edNTUS9nfU1F2JYFqzg_LP2EvBo4Z9iK5g").getSheetByName("Form Responses 1");
  var data = e.values;
  var dataRow = e.range.getRow();
  var helperColumn = sh.getRange(dataRow, 9).getValue();
  
  if (!helperColumn) {
    if (data[7] == "Leaving Class") {
      sh.getRange(dataRow, 3).setValue(new Date());
      sh.getRange(dataRow, 9).setValue(new Date());
    }
    if (data[7] == "Returning") {
      sh.getRange(dataRow, 5).setValue(new Date());
      sh.getRange(dataRow, 9).setValue(new Date());
    }
  }
  else {
    if (data[7] == "Leaving Class") {
      sh.getRange(dataRow, 5).setValue(helperColumn);
      sh.getRange(dataRow, 3).setValue(new Date());
      sh.getRange(dataRow, 9).setValue(new Date());
    }
    if (data[7] == "Returning") {
      sh.getRange(dataRow, 3).setValue(helperColumn);
      sh.getRange(dataRow, 5).setValue(new Date());
      sh.getRange(dataRow, 9).setValue(new Date());
    }
  }
}

在表单中选择“离校”选项时的示例输出(H 列):

Sample

Sample Output

学生编辑表格并选择“返回课堂”选项(H 列)时的示例输出:

sample 2

Sample 4

这使用了辅助列

Column H
,它反映了
Column I
中的时间值。这将实现高效的时间跟踪。

例如,如果我选择“下课”选项,则“超时”部分中的相应时间将自动填充到H列。随后,如果我修改表格并选择“返校”选项,则“超时”部分中的数据将自动填充到H列中。 H 列将转移到“时间”列。

© www.soinside.com 2019 - 2024. All rights reserved.