在Google表格脚本中设置当前单元格的值

3
我希望能够创建一个公式,在特定单元格更改时生成时间戳。下面的代码可以实现这个目标。现在我想将该时间戳固定到工作表中,方法是将该公式转换为纯文本。
如果您手动执行此操作,您需要选择时间戳,将其复制并粘贴为值。
我不想手动执行此操作,因此我创建了以下脚本。它试图覆盖当前活动单元格。有人知道如何使其正常工作吗?
谢谢
function cvTimestamp(value) {
  var timezone = "GMT+1";
  var timestamp_format = "dd-MM-yyyy HH:mm:ss"; // Timestamp Format. 


  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];


  var date = Utilities.formatDate(new Date(), timezone, timestamp_format);

  return date

  // Returns the active cell
  var cell = sheet.getActiveCell();
  // try to write date to the active cell as a value.
  cell.setValue(date);

}

您可以尝试在此SO帖子中使用RangesetValue()方法来设置特定集合的值。 - Teyam
1个回答

2
以下是脚本内容,当函数名称为“onEdit()”时,将执行此脚本。并且电子表格中的编辑单元格将更改为“日期”。
function onEdit(e){
  var row = e.range.getRow();
  var col = e.range.getColumn();
  if (row == 3 && col == 3){ // You can freely define the range for putting DATE. 
    var timezone = "GMT+1";
    var timestamp_format = "dd-MM-yyyy HH:mm:ss";
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    var col = 5; // If you want to put a value to colmun 'E' of editing cell, col is 5.
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    ss.getRange(e.range.getRow(), col).setValue(date);
  }
}

这不按预期工作,因为它在我尝试编辑的每个单元格中都放置了一个时间戳。我可以尝试编辑它以检查 e 是否在我想要写入的同一行中。如果是,则在该行的特定列中更新时间戳。(我不知道如何检查这个) 除非有更简单的解决方案。 - Christoph
活动单元格可以通过“e.range”检索。如果您想自动编辑其他单元格,则可以基于活动单元格获取单元格位置。例如,如果您编辑“a1”单元格并想更改“b2”单元格,“e.range”具有“a1”位置。因此,使用“offset()”,您可以将“date”写入所需的单元格。我更新了示例脚本,请查看。 - Tanaike
那个方法是可行的,但我最初使用普通公式的原因是为了方便选择哪个字段定义时间戳。现在每次添加新字段都必须编辑脚本代码。 - Christoph
非常抱歉我的英语能力不好。请检查我刚刚更新的示例脚本。时间戳的列位置在您编辑各种单元格时被锁定。在示例中,时间戳显示在D列。如果我还有什么误解,请告诉我。我想再进行修改。 - Tanaike
1
自定义函数将输出一个值到与输入值相同的单元格,因此它无法将来自自定义函数单元格的值放入其他单元格中。虽然在使用多维数组时,可以将值放入其他单元格,但它不能覆盖现有值。因此,当您想要从自定义函数的单元格将日期放入其他单元格时,我考虑使用具有有限范围的onEdit()的方法。请检查更新后的示例脚本。 - Tanaike
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接