应用程序脚本更新选项卡时自动时间戳

问题描述 投票:0回答:1

因此,我正在尝试创建一个脚本,该脚本可以应用于电子表格文件中的多个选项卡,并且当该选项卡中的某些内容更新/更改时,将自动更新每个单独选项卡中的时间戳。我想要时间戳的单元格在每个选项卡中都不同。我以为我已经可以正常工作了,但是在两天没有碰该文件并返回到它之后,我发现它不再更新。任何人都可以看一下问题出在哪里吗?另外,你知道为什么它会工作两天然后在不对脚本进行任何编辑的情况下停止工作吗?我是java新手,非常感谢任何帮助。这是我当前使用的脚本:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSheet();
  if(ss.getName()=='Sheet 1') {e.source.getSheetByName("Sheet 1")
    ss.getRange("F3").setValue(new Date())}
  if(ss.getName()=='Sheet 2') {e.source.getSheetByName("Sheet 2")
    ss.getRange("L3").setValue(new Date())}
  if(ss.getName()=='Sheet 3') {e.source.getSheetByName("Sheet 3")
    ss.getRange("K4").setValue(new Date())}
  if(ss.getName()=='Sheet 4') {e.source.getSheetByName("Sheet 4")
    ss.getRange("K4").setValue(new Date())}
}

我应该采用不同的方式来处理这个脚本吗?

javascript google-apps-script google-sheets timestamp
1个回答
0
投票

您的脚本有一些效率低下和不必要的代码行,但让我们首先解决主要问题:

变量范围:您使用

ss
作为活动工作表,但还尝试通过
e.source.getSheetByName(...)
按名称获取工作表,这是多余的。

事件对象:您没有有效地使用事件对象

e
,它为您提供了与编辑事件相关的所有详细信息。

这是脚本的不同版本(希望是更优化的版本):

function onEdit(e) {
  var sheet = e.source.getSheetByName(e.range.getSheet().getName());
  var sheetName = sheet.getName();
  
  // Use a switch statement to handle different sheet names
  switch(sheetName) {
    case 'Sheet 1':
      sheet.getRange('F3').setValue(new Date());
      break;
    case 'Sheet 2':
      sheet.getRange('L3').setValue(new Date());
      break;
    case 'Sheet 3':
      sheet.getRange('K4').setValue(new Date());
      break;
    case 'Sheet 4':
      sheet.getRange('K4').setValue(new Date());
      break;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.