Google apps script 填写单元格时的自动时间戳

Google apps script 填写单元格时的自动时间戳,google-apps-script,google-sheets,timestamp,Google Apps Script,Google Sheets,Timestamp,我有一个非常简单的excel公式,它可以工作,因为我可以限制递归迭代。我不是很懂脚本,但这就是它,它是有效的 =IFD24=p,IFE24=,日期戳,E24,IFD24=F,IFE24=,日期戳,E24 它是一个通过/失败测试表,当有人通过或失败测试时,它会添加一个时间戳。我们又增加了几个人,我想将文档移动到谷歌应用程序,让多人同时处理 我遇到的唯一问题是它引起的循环引用。在excel中,我可以在选项中限制迭代次数,我不再有这种能力。任何帮助都会很好 编辑:我试过了。 我试图找到一种输入VBA脚

我有一个非常简单的excel公式,它可以工作,因为我可以限制递归迭代。我不是很懂脚本,但这就是它,它是有效的

=IFD24=p,IFE24=,日期戳,E24,IFD24=F,IFE24=,日期戳,E24

它是一个通过/失败测试表,当有人通过或失败测试时,它会添加一个时间戳。我们又增加了几个人,我想将文档移动到谷歌应用程序,让多人同时处理

我遇到的唯一问题是它引起的循环引用。在excel中,我可以在选项中限制迭代次数,我不再有这种能力。任何帮助都会很好

编辑:我试过了。 我试图找到一种输入VBA脚本的方法,该脚本是一位同事创建的,适合我使用。我不擅长编写脚本,因此无法将其转换为google apps脚本:

VBA脚本:

    Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 4 Then
If Cells(Target.Row, 5).Value = "" Then

Cells(Target.Row, 5).Value = Now
End If
Else
End If


End Sub
理论上,我试图创建一个脚本,它将复制一个有时间戳的单元格,然后尝试“粘贴特殊”并将值粘贴到所需的单元格中。这将工作,除非我无法找到一种方法来粘贴特殊的谷歌应用程序脚本

谢谢你的帮助
/编辑

Stackoverflow是一个询问与编程相关的问题的地方,例如您实际正在处理的问题。不是真的要求别人为你开发,也就是说,你甚至还没有开始尝试任何应用程序脚本代码。我建议你阅读它的和。这真的很容易开始

无论如何,为了帮助你开始,我会放弃你说的一切,坚持问题的标题:当一个单元格被填写时,自动时间戳

我建议你在应用程序脚本上完成这一切,并完全放弃你的公式,例如

函数onEdit{ var s=电子表格app.getActiveSheet; 如果s.getName==Sheet1{//检查我们的工作表是否正确 var r=s.getActiveCell; 如果r.getColumn==4{//,则检查该列 var nextCell=r.offset0,1; 如果nextCell.getValue==//为空? nextCell.setValuenew日期; } } }
这段代码与我从您那里了解到的一样,即:如果在D列上编辑了某些内容,而E列为空,则将当前日期添加到E中。

实际上,在这种情况下,您不必编写任何脚本。谷歌或其他人已经这么做了。在谷歌电子表格中,进入Insert->Script并按时搜索。有两个现成的脚本可以实现您想要的功能。我发现上次修改的日期非常有效。选择它并单击安装按钮。您可以重新格式化列以显示日期、日期+时间等。您还可以在列中手动编码日期,或者如果您以前跟踪日期,则可以将其从另一列中移动,并且它们将保持在您设置的状态。但是,更新行中的任何单元格都会更新时间戳。

这要容易得多! =现在

=今天


根据您的需要

只需将上述代码添加到同一工作表中的多列自动打印中即可


如果您想在单元格再次更改时更新,只需删除这一行即可

if( nextCell.getValue() !== '' ) //is empty?

顺便问一下,如何将日期格式化为ie.dd/mm/yyyy而不是默认的dd/mm/yyyyy hh:mm:ss格式

我将时间戳设置为包含hh:mm:ss,但在一分钟内测试了4次后,我得到:03,14,11,07随着时间戳中的mm波动。

你只需要使用应用程序脚本。 我将用一个例子来解释:

function onEdit(e) {
 var row = e.range.getRow();
e.source.getActiveSheet().getRange(row,7).setValue(new Date());
}
这将获取当前活动工作表getActiveSheet中所有行getRangerow的第7列&无论何时编辑onEdite,它都会在第7列中添加时间戳setValuenew Date


现在,您可以选择获取单元格范围并根据需要使用。有关getRange的更多信息,请参阅。

谢谢您的帮助。我对脚本非常陌生,所以现在我所能做的就是努力学习。我通读了指南,虽然我尝试了很多不同的东西,但我不知道什么是有效的。我从未见过r.offset,我不得不用谷歌搜索那是什么。好吧,我很高兴我帮了忙。偏移只是一种方法,在本例中可能更简单,但我很少在其他地方使用它。顺便说一句,既然你是新来的,当你觉得自己得到了一个好的答案时,你应该把它标记为接受。投票也是另一个很好的功能。我接受了答案,但我没有足够的声誉来投票-对不起。你为什么要检查表名和列号?我有点困惑。。。为什么r.getActiveCell不会返回已输入函数的单元格?库中的插入脚本功能不再可用。现在和今天返回的值在每次重新计算电子表格时都会更改。这不会检查编辑发生在哪个工作表上,并且会在没有警告的情况下覆盖G列中的数据。
function onEdit(e) {
 var row = e.range.getRow();
e.source.getActiveSheet().getRange(row,7).setValue(new Date());
}