尝试更改为 onChange 后 onEdit 触发器坏了 参考

问题描述

只需要快速了解为什么当我从 onEdit 更改为 onChange 时它破坏了脚本,我尝试了大约 2 天来找出问题所在,但仍然不知道我做错了什么,所以请耐心等待,我我确信在公共论坛上有很多令人头疼的问题,我为成为其中之一而提前道歉;我知道 Simple 和 Installable 触发器是不同的我只是不知道如何转换为新的“理想”格式

它应该在“RAW”表中寻找变化,然后在“Raw”和“Examples”表的顶部创建一行,并应用一些函数

当在示例中找到编辑时,它还会创建一个新行,我也在尝试找出 onChange 范围表示法

这是工作表的链接,请检查脚本,看看我做错了什么; https://docs.google.com/spreadsheets/d/1GKrS-5e6ArW8g8CXgFE_Tzow6PjDtYoEjzLCBg6cNrg/edit?usp=sharing

function createSpreadsheetopenTrigger(e) {
    if (!e) {
        throw new Error('Script Now running');
    }
    if (e.range.getA1Notation() !== 'A2') {
        return;
    }
    var ss = SpreadsheetApp.getActive();
    ScriptApp.newTrigger('myFunction')
        .forSpreadsheet(ss)
        .onopen()
        .create();
}
sh.insertRowAfter(1);
sh.setRowHeight(2,21);
var freeze = sh.getRange("A2:C2");
freeze.copyTo(freeze,{
    contentsOnly: false
});
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Examples");
sh.insertRowAfter(1);
sh.setRowHeight(2,21);
sh.getRange("A2").setFormula('=RAW!A3');

以前的样子;

function onEdit(e) {
  if (!e) {
    throw new Error('Script Now running');
  }
  if (e.range.getA1Notation() !== 'A2') {
    return;
  }
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sh = ss.getSheetByName("RAW"); 
  sh.insertRowAfter(1); 
  sh.setRowHeight(2,21);
  var freeze = sh.getRange("A2:C2"); 
  freeze.copyTo(freeze,{contentsOnly:false});   
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sh = ss.getSheetByName("Examples"); 
  sh.insertRowAfter(1); 
  sh.setRowHeight(2,21);
  sh.getRange("A2").setFormula('=RAW!A2');
  var freeze = sh.getRange("A2:C2"); 
  freeze.copyTo(freeze,{contentsOnly:false});   
}

解决方法

onEditonChange 触发器的工作方式不同,因此它们使用的事件对象具有不同的方法。

根据事件对象 documentationonChange 触发器使用以下内容:

  • authMode
  • changeType
  • triggerUid
  • user

从本质上讲,从 onEdit 触发器切换时的主要问题是您仍在使用 range

参考