【问题标题】:Running an onEdit Script on selected sheets only仅在选定的工作表上运行 onEdit 脚本
【发布时间】:2021-07-23 01:47:01
【问题描述】:

我是编码脚本的新手,但我设法复制和编辑(bodge...)一个将 onEdit 的脚本,将自定义时间戳放入发生编辑的单元格旁边的单元格中。该脚本以 x2 onEdit 列 (3,6) 为目标,为单元格偏移加时间戳 (-1)。

工作簿现在已开发为包含多个工作表,其中大部分不适合运行此脚本,但我不知道如何指定它应该在哪些工作表上运行。

下面是我拼凑的脚本,它适用于所有工作表,我现在想将其限制为特定工作表。

function onEdit(e) {
 var colsToWatch = [3,6],
    offset = [-1,-1],
    ind = colsToWatch.indexOf(e.range.columnStart);
if (ind === -1 || e.range.rowStart === 1) return;
e.range.offset(0, offset[ind])
.setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT+1", "dd MMM yyyy     HH:mm.ss"))
}

请有人帮助我,提供仅在特定工作表上运行脚本的代码。我也将感谢任何关于更简单脚本以实现相同目标的建议,特别是如果它消除了在初始编辑后随后编辑 onEdit 单元格时被覆盖的时间戳。

非常感谢!!

【问题讨论】:

    标签: javascript google-apps-script google-sheets triggers


    【解决方案1】:
    function onEdit(e) {
      const sh = e.range.getSheet();
      const shts = ['Sheet1','Sheet2'];
      const idx = shts.indexOf(sh.getName());
      if(~idx ) {
        //Whatever code you put here will only run on Sheet1 or Sheet2
      }
    }
    

    这对我有用(在 Sheet1 和 Sheet2 上):

    function onEdit(e) {
      //e.source.toast('entry');
      const sh = e.range.getSheet();
      const shts = ['Sheet1','Sheet2'];
      const idx = shts.indexOf(sh.getName());
      if(~idx ) {
        let rg = sh.getRange(e.range.rowStart,9);
        if(rg.isBlank()) {
          rg.setValue(new Date());
        }
      }
    }
    

    JavaScript Reference

    【讨论】:

    • 谢谢@Cooper - 它有效,非常感谢!如果有人确实有办法在初始时间戳之后简化和/或防止后续时间戳更新,我将不胜感激。
    • 在时间戳单元格中放入时间戳之前,请确保时间戳单元格不包含时间戳。
    • 抱歉——我一定只是在测试第 1 行,由于某种原因不会导致时间戳。您建议@Cooper 的代码不起作用,它仍然在多张纸上加上时间戳,除了那些指定的。
    • 我测试了它,它对我有用,所以你的实现一定有问题。
    • 谢谢。您能否就我如何错误地实施它提供一些建议,因为我无法让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多