编辑特定列时,如何使此脚本仅 运行?

How do I get this script to only run when a specific column is edited?

纯粹基于执行日志,似乎每次有人编辑 sheet 时,此脚本都会 运行ning,但我只需要在第 3 列或第 7 列时 运行被编辑。我要在脚本中添加什么来告诉它这样做?我不太懂脚本,所以非常感谢任何帮助!

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "FORD" ) {
    var r = s.getActiveCell();
    if( r.getColumn() == 3) {
     
      var nextCell = r.offset(0,19);
      if( nextCell.getValue() === '' )
        nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
    }
    
    if( r.getColumn() == 7) {
      var nextCell = r.offset(0,16);
      if( nextCell.getValue() === '' )
        nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
    }
  }
}

你的代码居然能在我的身上运行,这很奇怪吗?如果我对您的问题的理解正确,您希望您的脚本在第 3 列和第 7 列时为 运行。我没有看到您的脚本有任何问题,但我认为下面的这种方法应该更好。我们将使用 e 对象来获取您的数据。

代码:

function onEdit(e) {
  var s = e.source.getActiveSheet();

  if( s.getName() == "FORD" ) {
    var r = e.range;

    if( r.getColumn() == 3) {
      var nextCell = r.offset(0,19);
      if( nextCell.getValue() === '' )
        nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
    }
    
    if( r.getColumn() == 7) {
      var nextCell = r.offset(0,16);
      if( nextCell.getValue() === '' )
        nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
    }
  }
}

实际上与您的脚本执行的逻辑相同,但现在,我们不会将数据直接获取到 sheet,而是获取到 onEdit 事件对象。

如果您的意思是 onEdit 函数只应在第 3 列和第 7 列的编辑期间 TRIGGERED,那是行不通的。

每次手动编辑 sheet 时都会触发

onEdit 函数,无论 运行ge 是多少。我们只能通过添加条件来限制功能做事,但我们实际上无法在手动编辑完成后停止触发功能。

每次手动编辑都会运行,这只是一个限制问题,我们根据添加的条件限制功能做事。 (仅当 sheet 名称为 FORD 且列 37 被编辑时,运行 才执行某些命令的条件)

如果我误解了你的问题,我真诚地道歉。

编辑:

我正在寻找其他来源,您似乎可以使用 switch-case 而不是经典的 if-else 语句,因为它在大数据中比后者更快。我已经对其进行了测试,它似乎在单个测试中确实有一些显着差异。它在大数据中会明显更快。

如果-其他:

开关盒:

测试:

  • if-elseswitch-case 的测试相同。
  • 前 3 个测试是对第 3 列的编辑,后 3 个测试是对第 7 列的编辑,最后 3 个是 non-3/7 编辑
  • 运行次自下而上阅读
  • 这实际上因测试而异,但粘贴了这些结果,因为它似乎接近平均值。
  • 存在应检查的配额。有关详细信息,请参阅 link。如果您想要更多,可能需要付费订阅。