填写单元格时的自动时间戳

时间:2012-07-12 18:39:46

标签: google-apps-script excel-formula google-sheets

我有一个非常简单的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

理论上,我尝试创建一个脚本,该脚本将复制一个带有时间戳的单元格,然后尝试“粘贴特殊”并将值粘贴到所需的单元格中。除非我无法找到使用谷歌应用脚​​本编写特殊功能的方法,否则这将有效。

感谢您的帮助 /编辑

7 个答案:

答案 0 :(得分:24)

Stackoverflow是一个提出与编程有关的问题的地方,例如:你真正在做的事情。并不是真的要求其他人为你开发它,即你还没有开始尝试任何Apps Script代码。我建议您阅读tutorialsguides。这真的很容易开始。

无论如何,只是为了帮助你开始,我会删除你说的所有内容并坚持问题标题:"填写单元格时的自动时间戳"

我建议你在应用程序脚本上完成所有操作,然后完全放弃你的公式,例如

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)

比这容易得多! 现在=

=今天

根据您的需要