14

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

从理论上讲,我尝试创建一个脚本,该脚本将复制一个带有时间戳的单元格,然后尝试“粘贴特殊”并将值粘贴到所需的单元格中。这会起作用,除非我无法找到一种使用谷歌应用脚​​本进行特殊粘贴的方法。

感谢您的帮助/编辑

4

7 回答 7

37

Stackoverflow 是一个询问与编程相关的问题的地方,例如您实际正在研究的问题。并不是真的要求其他人为您开发它,即您甚至还没有开始尝试任何 Apps Script 代码。我建议您阅读它的教程指南。这真的很容易开始。

无论如何,只是为了帮助您入门,我将放弃您所说的一切并坚持问题标题:“填写单元格时的自动时间戳”

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

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());
    }
  }
}

这段代码做了我从你那里了解到的,即:如果在 column 上编辑了某些内容D并且 columnE为空,则将当前日期添加到E.

于 2012-07-13T04:13:02.060 回答
1

只需在同一工作表中添加多列 AutoStamp 的上述代码

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());
    }
  }
}
于 2016-06-20T19:08:38.383 回答
0

您只需要使用 Apps 脚本。我会用一个例子来解释:

function onEdit(e) {
var row = e.range.getRow();
if (row > 1 && e.source.getActiveSheet().getName() === "Sheet1") {
    e.source.getActiveSheet().getRange(row, 14).setValue(new Date());
} else {
    if ((row > 1 && e.source.getActiveSheet().getName() === "Sheet2") || (row > 1 && e.source.getActiveSheet().getName() === "Sheet3")) {
        e.source.getActiveSheet().getRange(row, 6).setValue(new Date());
    }}}

这首先检查正在编辑的工作表。如果是 sheet1,那么它会占用该工作表中所有行的第 14 列(getRange(row,14)),并且无论何时编辑任何内容(edit(e) ),它都会在第 14 个中添加时间戳(setValue(new Date()) )柱子。同样,如果是不同的工作表,即Sheet2或Sheet3或任何其他名称,我们可以根据需要为时间戳选择不同的列。此外,添加了if( (row > 1)条件,以便在编辑时不会在第一行中添加时间戳,因为它通常是标题。

现在您选择获取一系列单元格并根据需要使用它们。有关 getRange() 的更好想法,请参阅此问题

于 2021-04-02T18:39:37.063 回答
-1

如果您希望它在单元格再次更改时更新,只需删除此行

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

顺便说一句,日期如何格式化为ie。dd/mm/yyyy 而不是默认的 dd/mm/yyyy hh:MM:ss 格式

于 2017-03-17T23:52:33.750 回答
-3

实际上,在这种情况下,您不必编写任何脚本。谷歌(或某人)已经做到了。在您的 Google 电子表格中,转到“插入 -> 脚本”并搜索“时间”。有两个现成的脚本可以做你想做的事。我发现“单元格上次修改日期”效果很好。选择它并单击“安装”按钮。您可以重新格式化该列以显示日期、日期+时间等。您还可以在列中手动编码日期,或者如果您之前跟踪它,则将它们从另一列中移动,它们将在您设置时保留。但是更新行中的任何单元格都会更新时间戳。

于 2013-05-09T17:23:50.457 回答
-4

我将时间戳设置为包括 HH:MM:SS,但在一分钟内测试了 4 次邮票后,我得到:03、14、11、07 在我的时间戳中随着 MM 波动。

于 2018-02-02T07:22:44.840 回答
-9

比这容易得多!=现在

或者;

=今天

取决于你需要什么

于 2016-01-25T14:21:38.120 回答