【问题标题】:How do I de-bug my OnEdit code in App Script? [duplicate]如何调试 App Script 中的 OnEdit 代码? [复制]
【发布时间】:2020-12-11 23:08:48
【问题描述】:

我无法让我的 OnEdit 功能正常工作。我在电子表格中嵌入了一个触发复选框作为命名范围,这样我的团队就可以“检查”触发框以运行脚本,而无需深入研究脚本。我在电子表格中创建的命名范围按钮称为“MasterClear”。

但是,当我尝试运行 OnEdit 脚本时,我在第 3 行收到一条错误消息。这些函数在我测试它们时会自行工作。但是,单独的 OnEdit 触发器并没有执行。我从网上找到的论坛借用了这行代码,所以我无法自己解码或解决它。有人可以帮忙吗?

脚本 //

  function onEdit(e) {
  var MasterClear = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("MasterClear").getA1Notation(); 
  var actv = e.range.getA1Notation();
  if (actv == MasterClear ) {
    clear1();
    clear2();
 
}
}

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Team 3');
  sheet.getRange('T11:T300').clearContent() ;
 
}

function clear2() {

  var sheet = SpreadsheetApp.getActive().getSheetByName('Team 3');
  sheet.getRange('O11:O300').clearContent() ;
  
}

【问题讨论】:

  • 我经常使用e.source.toast(),并且在工作正常时我会定期检查视图/执行。在特别困难的情况下,我从另一个函数调用运行整个函数,我自己提供了事件对象。但大多数时候,我只是通过编辑测试表并在 toast 或电子表格中捕获信息来进行适当的调试。
  • 这能回答你的问题吗? How can I test a trigger function in GAS?
  • 您正在尝试从脚本编辑器运行 onEdit 函数,因此不会填充 e。看看this answer

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


【解决方案1】:

这对我有用:

为了便于查看和命名范围的名称,我更改了范围和工作表名称。我使用 toasts 让我知道什么在工作,什么不是,我将事件对象推送到 Z1 以获取调试信息。我也每次都将复选框重置为 false。

function onEdit(e) {
  //e.source.toast('Entry');
  //const sh=e.range.getSheet();
  //sh.getRange('Z1').setValue(JSON.stringify(e));
  if(e.range.getA1Notation()==e.source.getRangeByName('MyCheckBox').getA1Notation() && e.value=="TRUE") {
    e.range.setValue("FALSE");
    clear1(e);
    clear2(e);
  }
}

function clear1(e) {
  //e.source.toast('clear1');
  e.source.getSheetByName('Sheet1').getRange('2:2').clearContent();
}

function clear2(e) {
  //e.source.toast('clear2');
  e.source.getSheetByName('Sheet1').getRange('3:3').clearContent();
}

您可以只在工作表上放置一个按钮,而根本不使用 onEdit()。在许多方面,这更容易,服务器负担也更少。并不是大多数人担心这一点。

【讨论】:

  • 谢谢。我实际上不熟悉吐司的工作原理。你能描述一下这是做什么用的以及它是如何工作的吗?
  • 我现在正在尝试将其实现到我的工作表中,但不知道如何使其工作。我不确定我是否足够精明,可以让吐司发挥作用。但是,使用您建议的代码,我收到一条错误消息:无法读取未定义的属性“范围”(第 5 行)。有什么建议吗?我试图做的是将 [MyCheckbox] 改为我的命名范围,称为 [MasterClear]。然后,对于 clear1 和 clear2 函数,我添加了工作表名称和单元格范围。这些是我为了适应我的电子表格所做的唯一更改。它不工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2017-05-26
  • 2023-03-16
  • 2022-06-19
  • 1970-01-01
相关资源
最近更新 更多