【问题标题】:How to debug OnEdit event function in google sheets appscript? [duplicate]如何在 google sheet appscript 中调试 OnEdit 事件函数? [复制]
【发布时间】:2021-11-21 11:46:21
【问题描述】:

我曾在 Windows 窗体应用程序 C#、uwp 应用程序中工作过。就这些而言,调试非常简单,我在需要暂停执行的地方放置了一个断点,以查看放置断点的变量的当前值,我通过鼠标悬停或使用 autos 检查值。但我是表格应用程序脚本的新手,并试图找到如何调试。但无法得到。这里是 onEdit 事件函数。

function onEdit(e) {      
    var range = e.range;
    // range.setNote('Last modified: ' + new Date());
    // range.setBackground("green");
    Logger.log("hello this is onEdit");

    if(range.getNumRows() === 1 && range.getNumColumns() === 1 ) 
    {      
        if (range.getValue = "Done")
        {
         range.setValue("Weekly");
        }
    }
}

我把这个函数放在文件部分的 code.gs 中。它运作良好。 但是,如果我放置一个断点,并在工作表中的任何位置进行编辑,则不会调用断点。 如果我单击“调试”(调试所选功能)菜单,则调试工作。 但未定义参数 e,因为单元格编辑不会从工作表调用 OnEdit 函数。

我不知道如何通过编辑单元格来调试 onEdit 函数?

【问题讨论】:

  • 我只是在不同的地方使用e.source.toast() 命令来弄清楚发生了什么。但是您可以通过创建一个非常简单的事件对象从另一个函数运行它。
  • 如果你想创建一个事件对象尝试运行function onEdit(e) {Logger.log(JSON.stringify(e));}并在编辑后查看执行,然后你就会知道创建事件对象需要什么。

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


【解决方案1】:

以防万一,下面是 SpreadsheetApp 中事件对象的结构:

var e = {
    "authMode": {object},
    "range": {
      "columnStart": int,
      "rowStart": int,
      "rowEnd": int,
      "columnEnd": int
    },
    "source": {Spreadsheet_object},
    "oldValue": "string",
    "user": {
      "nickname": "string",
      "email": "string"
    },
    "value": "string"
  };

【讨论】:

  • 我认为这不会导致使用 Range 对象加载 e.range
  • @Cooper 可能是这样。尽管如此,我经常将这种结构用作简单的简短备忘单。 ) 顺便说一句,恭喜获得 40.000!
【解决方案2】:

当您使用onEdit() 并更改电子表格中的值时,Apps 脚本会将事件对象传递给onEdit() 函数,通常称为e。事件对象包含有关导致触发器触发的上下文的信息。

调试事件对象的唯一方法是在事件发生后打印e 的值。您可以通过点击 Apps 脚本的 Executions 选项卡来查看每个事件。

示例:

代码:

function onEdit(e) {
  Logger.log(e.range.getA1Notation());
}

输出:

参考资料:

【讨论】:

    【解决方案3】:

    作为中间解决方案可能有用的是在您的函数中创建一个虚拟 e(我认为它是一个对象),就像从一个虚拟函数调用它一样。

    function dummy()
    {
      var dummye = [];  //create a temp value by executing Logger.log(e) in onEdit
      // and by executing once from actual sheet which will run onEdit(e) and print it.
    
      onEdit(dummye);
    }
    
    function onEdit(e) {    
        //Logger.log(e);  //take this value to create dummye
        
        var range = e.range;
        // range.setNote('Last modified: ' + new Date());
        // range.setBackground("green");
        Logger.log("hello this is onEdit");
    
        if(range.getNumRows() === 1 && range.getNumColumns() === 1 ) 
        {      
            if (range.getValue = "Done")
            {
             range.setValue("Weekly");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多