我有一个 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时间。
表格结果电子表格:
这就是我想要的:
输入 | 输出 |
---|---|
创建表格条目,单元格 h2 =“离开班级”,例如学生离开班级去洗手间 | 单元格 C2 自动更新时间戳中的时间并被锁定,因此它不会更改(本质上是时间的“值”) |
学生返回时表格会更新,h2 变为“返回课堂” | C2 单元保持原样。单元格 E2 现在变为编辑后的时间戳的时间,因此 C2 是他们离开房间的时间,E2 是他们返回的时间。 |
我尝试了一个公式,但它不会复制值并锁定单元格。我已经有一段时间没有从事脚本工作了,但了解基础知识。
您可以尝试这个脚本,它应该可以满足您的需求。
代码:
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 列):
学生编辑表格并选择“返回课堂”选项(H 列)时的示例输出:
这使用了辅助列
,它反映了Column H
中的时间值。这将实现高效的时间跟踪。Column I
例如,如果我选择“下课”选项,则“超时”部分中的相应时间将自动填充到H列。随后,如果我修改表格并选择“返校”选项,则“超时”部分中的数据将自动填充到H列中。 H 列将转移到“时间”列。