我有一个非常简单的excel公式,它可以工作,因为我可以限制递归迭代。我不是很精通脚本,但这就是它的功能而且它有效。
=IF(D24="P",IF(E24="",DateStamp,E24),IF(D24="F",IF(E24="",DateStamp,E24),""))
它是一个通过/失败测试表,它会在有人通过或未通过测试时添加时间戳。我们添加了更多人,我想将文档移动到谷歌应用程序,以允许超过1人同时处理它。
我遇到的唯一问题是这引起的循环引用。在excel中我可以限制选项中的迭代次数,我不再具备此功能。任何帮助都会很棒。
编辑:我尝试过的。 我试图找到一种方法来输入一个同事为我创建的VBA脚本。我不擅长编写脚本,所以我无法将其变成谷歌应用程序脚本: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
理论上,我尝试创建一个脚本,该脚本将复制一个带有时间戳的单元格,然后尝试“粘贴特殊”并将值粘贴到所需的单元格中。除非我无法找到使用谷歌应用脚本编写特殊功能的方法,否则这将有效。
感谢您的帮助 /编辑
答案 0 :(得分:24)
Stackoverflow是一个提出与编程有关的问题的地方,例如:你真正在做的事情。并不是真的要求其他人为你开发它,即你还没有开始尝试任何Apps Script代码。我建议您阅读tutorials和guides。这真的很容易开始。
无论如何,只是为了帮助你开始,我会删除你说的所有内容并坚持问题标题:"填写单元格时的自动时间戳"
我建议你在应用程序脚本上完成所有操作,然后完全放弃你的公式,例如
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
var r = s.getActiveCell();
if( r.getColumn() == 4 ) { //checks the column
var nextCell = r.offset(0, 1);
if( nextCell.getValue() === '' ) //is empty?
nextCell.setValue(new Date());
}
}
}
此代码执行我从您的理解中执行的操作,即:如果在列D
上编辑了某些内容且列E
为空,则将当前日期添加到E
。
答案 1 :(得分:1)
除了上面的代码 FOR Same Column AutoStamp in same Sheet
之外function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
var r = s.getActiveCell();
if( r.getColumn() == 5 ) { //checks the column
var nextCell = r.offset(0, 1);
//if( nextCell.getValue() !== '' ) //is empty?
nextCell.setValue(new Date());
}
if( r.getColumn() == 7 ) { //checks the column
var nextCell = r.offset(0, 1);
//if( nextCell.getValue() !== '' ) //is empty?
nextCell.setValue(new Date());
}
if( r.getColumn() == 9 ) { //checks the column
var nextCell = r.offset(0, 1);
//if( nextCell.getValue() !== '' ) //is empty?
nextCell.setValue(new Date());
}
}
}
答案 2 :(得分:0)
如果您希望更新单元格再次更改,请删除此行
//if( nextCell.getValue() !== '' ) //is empty?
顺便说一下:如何将日期格式化为ex。 dd / mm / yyyy而不是默认的dd / mm / yyyy hh:MM:ss格式
答案 3 :(得分:0)
您只需要使用 Apps 脚本。 我会用一个例子来解释:
function onEdit(e) {
var row = e.range.getRow();
e.source.getActiveSheet().getRange(row,7).setValue(new Date());
}
这将获取当前活动工作表 (getActiveSheet()) 中所有行 (getRange(row,7)) 的第 7 列,并且每当编辑任何内容时 (< em>onEdit(e)),它在第 7 列中添加时间戳 (setValue(new Date()))。
现在您选择获取单元格范围并根据要求使用。有关 getRange() 的更好主意,请参阅 this question。
答案 4 :(得分:-1)
实际上,在这种情况下,您不必编写任何脚本。谷歌(或其他人)已经做到了。在您的Google电子表格中,转到“插入 - &gt;脚本”并搜索“时间”。有两个现成的脚本可以做你想要的。我发现“Cell Last Modified Date”完美无缺。选择它并单击“安装”按钮。您可以重新格式化列以显示日期,日期+时间等。您也可以在列中手动编写日期代码,或者如果您之前正在跟踪它,则将其从其他列移动,并且它们将在您设置时保留。但是更新行中的任何单元格都会更新时间戳。
答案 5 :(得分:-2)
我将时间戳设置为包含HH:MM:SS,但是在不到一分钟的时间内测试印章4次后,我得到:03,14,11,07在我的时间戳中以MM的形式波动。
答案 6 :(得分:-6)
比这容易得多! 现在=
或
=今天
根据您的需要