试图找出一种使第二列自动更新以显示上次更新的时间戳的方法。我意识到该文档显示了最后一次修改的时间戳,但是我们有很多客户端同时访问和调整该文档。所以提出了这个请求。我承认我还没有完成编码,所以这超出了我的范围。

Myanda发布了一些看起来正确的方法,但是我们不确定如何实现满足我们的需要吗?

Google Spreadsheet Timestamp?

评论

如果您可以将我们链接到该文档,或者提供您所需要的示例文档,则将有所帮助。我可以相应地修改其他答案,但是我不确定您要问的是什么。您是否只需要一个带有时间戳的更新的单元格即可显示整个电子表格的更新时间?

嘿我们正在寻找的是,在第2列中,每当更新各自行中的任何单元格时,每行都会使用时间戳进行更新。很抱歉,由于机密信息,我无法发布该文档。但是它包含21列和60行。这有帮助吗?

知道了,让我看看我的原始代码,然后再回头给您:)

非常感谢Onen!

#1 楼

好的,这是我上一个答案中的代码的修改版本:



function onEdit(e) {
  // Your sheet params
  var sheetName = "MySheet";
  var dateModifiedColumnIndex = 2;
  var dateModifiedColumnLetter = 'B';

  var range = e.range; // range just edited
  var sheet = range.getSheet();
  if (sheet.getName() !== sheetName) {
    return;
  }

  // If the column isn't our modified date column
  if (range.getColumn() != dateModifiedColumnIndex) { 
    var row = range.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
    var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
    dateModifiedRange.setValue(time);
  };
 };


这是在抓取任何单元格的行更改并为该特定行的第二列分配时间戳。

要实现,您需要做的就是进入电子表格并单击Tools> Script Editor。在出现的编辑器页面中,只需将其粘贴到那里。由于这是onEdit()函数,因此无需向电子表格的单元格添加任何其他内容即可工作,只需将其粘贴到编辑器中并保存。

对于时间戳,我将格式设置为MM / dd / yy,然后离开时间。如果要更改它,可以只更改Utilities.formatDate的用法。

评论


Onen,这很完美!非常感谢!

–RichGonzalez
13年1月3日,23:42

很高兴听见!你能用一个复选标记来标记这个答案吗:)我想说的是,这样其他人都可以知道这个解决方案有效,但是我也想指出要点:P

– OnenOnlyWalter
2013年1月3日23:49



会做。绝对可以。一个后续问题。没有什么值得称赞的。更改为PST似乎不会将其更改为太平洋标准时间,但是EST可以工作。 java是否将PST读作其他缩写。有没有一种方法可以将时间显示为12小时与军事时间?

–RichGonzalez
2013年1月3日23:52

时间戳对我不起作用。对我来说,“ 20yy-MM-dd HH:mm”可以代替。我认为必须是小写字母或它不起作用(除非写这篇文章的时候是一月,啊哈哈哈)。

–里卡多
16-10-12在15:19



请注意,为.formatDate()使用“ DD”将使您获得“一年中的某天”-例如365(代表12月31日)。您可能需要“ dd”。您可以在此处查看日期格式值的完整列表:docs.oracle.com/javase/7/docs/api/java/text/…

– dancow
18年6月15日在1:21

#2 楼

仅供参考,接受的答案使用DD作为日格式,这将使您获得类似于“ 312”的信息,即一年中的第312天。

我用到了:

"yyyy-MM-dd, hh:mm:ss"


获取此信息:

2013-11-12, 03:43:20


评论


为什么不更正接受的答案?

– alexkovelsky
18 Mar 29 '18 at 10:31

好主意:webapps.stackexchange.com/questions/37408/…

– dancow
18年6月15日在1:21

#3 楼

我希望可以将它放在这里。下面是对上面函数的修改,但只针对行(第9行)而不是列。弄清楚如何使用列分配非常令人沮丧,但最终变得非常简单。感谢OnenOnlyWalter的原始代码:


function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); // Get spreadsheet name 
    var r = s.getActiveCell(); // store active cell name in current spreadsheet 
  var cell1 = 9 // This is the row I want to put values
  if(r.getRow() != cell1) { // Ignores this row (where I put the dates)
    var column = r.getColumn();  // Get column # from active cell
    var time = new Date(); // Get date and time of last mod
    time = Utilities.formatDate(time, "GMT-08:00", "MM/DD/yy, hh:mm:ss"); // Format date and time
    SpreadsheetApp.getActiveSheet().getRange(cell1,column).setValue(time); // put in time in cell
  };
 };


评论


这对我来说似乎很好。感谢您修复@OnenOnlyWalter的第8行错误。

– Zlatty
16年8月9日在18:50

由于用户时钟可能不准确,是否有一种标准的方法来获取服务器端的准确时间戳?

– Sim
17 Mar 6 '17 at 23:13

@Sim Google Apps脚本在服务器端运行。您获得的时间是从服务器获得的。

–user135384
17年7月18日在20:26