Google 表格的静态 TIMESTAMP

Posted

技术标签:

【中文标题】Google 表格的静态 TIMESTAMP【英文标题】:Static TIMESTAMP for Google Sheets 【发布时间】:2020-09-09 07:31:48 【问题描述】:

在电子表格中,需要一个在单元格中写入工作表的时区当前时间和日期的按钮,因此每次按下按钮时,该特定单元格中的时间戳都会更新。

在尝试了不同的脚本后,拒绝了一些,因为他们不使用格式 dd/mm/yyyy hh:mm:ss 或不允许更改格式,到了这一点:

function TIMESTAMP() 
  SpreadsheetApp.getActiveRange().setValue(new Date());
  var sheet = SpreadsheetApp.getActiveSheet();
  var addedDate = sheet.getRange(1,1).getValue();
  var addedTime = Utilities.formatDate(addedDate, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "hh:mm a");

当按下带有脚本的按钮时,当前活动单元格中会显示具有正确时区的时间戳,但会出现错误:

异常:参数 (String,String,String) 与 Utilities.formatDate 的方法签名不匹配。

如何指定要显示时间戳的单元格,每次按下按钮时更新其值并解决参数错误?

【问题讨论】:

所以要插入数据和时间戳?这在不同的细胞中?您要在哪个单元格中插入时间戳? 想插入到A1中。 【参考方案1】:

所以我找到了一个似乎适用于我的产品工作日志的解决方案:

=IF(A6="","",IF(B6<>"",B6,now()))

A6 是员工留下姓名的地方,但这可能是一个复选框,或者您可能想要满足的任何其他条件。

B6 是满足A6 条件时出现的时间戳。

【讨论】:

【参考方案2】:

试试:

function TIMESTAMP() 
  var ss=SpreadsheetApp.getActive();
  var sheet=SpreadsheetApp.getActiveSheet();
  sheet.getRange(1,1).setValue(Utilities.formatDate(new Date(sheet.getRange(1,1).getValue()), ss.getSpreadsheetTimeZone(), "dd/MM/yyyy HH:mm:ss"));

【讨论】:

【参考方案3】:

这个怎么样:

function TIMESTAMP() 
  
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var addedDateAndTime = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "dd/MM/yyyy HH:mm:ss");
    //Optional if you only want the date: var addedDate = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "dd/MM/yyyy");
    //Optional if you only want the time: var addedTime = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "hh:mm:ss");
    sheet.getRange(1,1).setValue(addedDateAndTime)
    

【讨论】:

如果您使用 24 小时制时钟,请使用“HH:mm:ss”,如果您使用 am/pm,请使用“hh:mm:ss a”。 您能否与我们分享您的电子表格副本?这应该可以工作,所以也许还有其他问题。 有一个合并的单元格,所以这就是问题所在。现在完美运行,非常感谢!!【参考方案4】:

查看您的代码,错误消息的原因是活动单元格不是A1,并且A1 为空白(作为getValue 返回和空字符串)或具有文本值

不改代码的解决方法是,在运行函数之前,先点击A1,然后运行函数。

您的代码已经指定要显示时间戳的单元格。在这条线上

SpreadsheetApp.getActiveRange().setValue(new Date());

它正在使用getActiveRange()。要使用另一个单元格,我看到的大多数示例都使用了 Class Sheet 的 getRange 方法之一。

顺便说一下,这个网站上有几个关于在 Google 表格中添加时间戳的问题。一个例子是Automatic timestamp when a cell is filled out

参考

https://developers.google.com/apps-script/reference/spreadsheet/sheet

【讨论】:

是的,有很多关于自动时间戳的知识,但我不具备将它们修改为分配给按钮的脚本或使其成为静态的专业知识。 在这种情况下,您应该询问如何做到这一点。

以上是关于Google 表格的静态 TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章

将外部数据作为静态数据拉到下一个空行,然后重复下一个空行? (将 Google Sheet 数据备份到 Excel)

Google 表格脚本 - 根据单元格作为今天的日期发送电子邮件

如果文本被另一个单元格匹配,请使用Google Apps脚本有条理地格式化一个单元格

从动态页面捕获结果

将Google电子表格导入Google电子表格

使用 Google 表单更新现有的 Google 表格