代码之家  ›  专栏  ›  技术社区  ›  Leon

为什么当我创建菜单时,它会说“无法在此上下文中调用SpreadsheetApp.newMenu()。”

  •  1
  • Leon  · 技术社区  · 7 年前

    我部署了一个web应用程序,当电子表格打开时,它可以调用该函数来创建一个新菜单。 下面是我写的部分

    function onOpen(){
      var url = "https://script.google.com/a/slt.org.au/macros/s/AKfycby2pFGHc3qWaxnD4WGTLMEAPMUocohzH_-OsUPxwqi8kmWfRZs8/exec";
      var currentSpreadsheet = SpreadsheetApp.getActive().getId();
      var requestAction = "onOpen";
      UrlFetchApp.fetch(url+"?requestAction="+requestAction);
    }
    

    在我的网络应用中,我写道

    function onOpen(currentSpreadsheet) {
      //Adds custom menu
    SpreadsheetApp.openById(currentSpreadsheet);
      var menu = [{name: "Add row", functionName: "addRow"},
                 {name: "Generate Invoice", functionName: "generateInvoice"}];
      SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
    }
    

    我也试过了

    function onOpen(currentSpreadsheet) {
          //Adds custom menu
          var menu = [{name: "Add row", functionName: "addRow"},
                     {name: "Generate Invoice", functionName: "generateInvoice"}];
          SpreadsheetApp.openById(currentSpreadsheet).addMenu("Custom", menu);
        }
    

    仍然不工作。这意味着addMenu只能在独立脚本或内置脚本中使用吗?但不是在谷歌的网络应用中?

    当我尝试使用addMenu()时,所有错误都会发生。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dean Ransevycz    7 年前

    您的脚本正在web应用程序的上下文中运行,但 onOpen() 触发器仅在绑定到文档/工作表/表单文件的脚本中运行。简而言之,您无法传递或安装 从web应用程序将函数转换为电子表格。

    documentation :

    要使用简单触发器,只需创建一个函数,该函数使用 这些保留函数名:

    onOpen(e) 当用户打开电子表格、文档或表单时运行 他或她有权编辑。。。