繁体   English   中英

类似的应用程序脚本不一样 - 为什么?

[英]Similar Apps Scripts Don't Work the Same - Why?

由触发器编辑器中设置的触发器触发的同一项目中的两个几乎相同的功能。

onWrongEdit(e)(由 onEdit 触发)有效,但是当我添加“var sheet = e.range.getSheet().getName();”时到 onWrongInsert(e)(由 onChange 触发)第二个 function 失败,即使它在添加该 var 行之前工作。

我到底错过了什么?

感觉很傻。 善待:)

function onWrongEdit(e){
  var sheet = e.range.getSheet().getName();
  var rangeCol = e.range.getColumn();
    if((sheet == 'Campaign Pipeline' && (rangeCol === 2 || rangeCol === 8 || rangeCol === 2)) || (sheet == 'Onboarding Pipeline' && (rangeCol === 2 || rangeCol === 3 || rangeCol === 4 || rangeCol === 5 || rangeCol === 11 || rangeCol === 12 ))){
      SpreadsheetApp.getUi().alert("STOP. Don't edit grey shaded cells. To fix, press CTRL+Z to undo. This error message will appear again, just ignore it.");
  }
}
function onWrongInsert(e){
  var sheet = e.range.getSheet().getName(); // The line that messes it up.
    if (e.changeType == 'INSERT_ROW'){  
    SpreadsheetApp.getUi().alert("STOP. You created a row the wrong way. Delete the row and use the 1POT menu.");
    }
}

您的答案来自执行页面

Aug 25, 2022, 11:19:26 AM   Info    {"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user":{"email":"","nickname":""}}


Aug 25, 2022, 11:19:26 AM   Error   TypeError: Cannot read property 'getSheet' of undefined
    at onWrongInsert(ag1:19:23)

这是因为在事件 object for onChange 中没有范围元素

我重写了它们,如下所示:

function onWrongEdit(e){
  Logger.log(JSON.stringify(e));
  var name = e.range.getSheet().getName();
    if((name == 'Sheet0' && (e.range.columnStart === 2 || e.range.columnStart === 8)) || (name == 'Sheet1' && (e.range.columnStart === 2 || e.range.columnStart === 3 || e.range.columnStart === 4 || e.range.columnStart === 5 || e.range.columnStart === 11 || e.range.columnStart === 12 ))){
      SpreadsheetApp.getUi().alert("STOP. Don't edit grey shaded cells. To fix, press CTRL+Z to undo. This error message will appear again, just ignore it.");
  }
}
function onWrongInsert(e){
  Logger.log(JSON.stringify(e));
  var sheet = e.range.getSheet().getName(); // The line that messes it up.
    if (e.changeType == 'INSERT_ROW'){  
    SpreadsheetApp.getUi().alert("STOP. You created a row the wrong way. Delete the row and use the 1POT menu.");
    }
}

function createTriggers() {
  ScriptApp.newTrigger('onWrongEdit').forSpreadsheet(SpreadsheetApp.getActive()).onEdit().create();
  ScriptApp.newTrigger('onWrongInsert').forSpreadsheet(SpreadsheetApp.getActive()).onChange().create();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM