当onOpen存在时,测试为加载项会导致错误

时间:2018-06-26 21:59:44

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

我正在尝试为Google表格创建一个附件。打开工作表后,脚本应在“加载项”中创建一个菜单项。

当我打开最初绑定到的工作表时,该项目已添加并且可以工作。当尝试使用onOpen作为我的脚本中已声明函数的附加组件对其进行测试时,它始终会导致未添加该项目,并在Google Chrome DevTools控制台中记录了针对该测试打开的工作表的错误:

Google Apps脚本:很抱歉,发生服务器错误。请稍等一下 再试一次。

如果我注释掉onOpen方法,则不会发生此错误。

我尝试通过Auth.none和Auth.limited两种方式通过附加方式运行它:

  • 脚本的原始副本附在其原始工作表上。
  • 脚本的原始副本与单独的表格一起运行。
  • 脚本的副本在单独的Google Scripts文件中运行,并与其他工作表一起运行。
  • 仅使用一个空的onOpen函数创建一个新的Sheet和有界脚本。

所有这些都会导致上面的错误,并且当我取消注释确实具有代码的onOpen函数的内容时,它们的代码似乎都无法运行。

这是原始副本的代码,但是请记住,即使内容已被注释掉,我仍然会收到错误消息,并且this指出即使将createMenu用于附件,也可以由Google App Script正确处理:

function onOpen(e){
  var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp or FormApp.
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem("Show Sidebar", "showSidebar");
    menu.addToUi();
  } else {
    // Add a new menu (doesn't work in AuthMode.NONE).

    var topUI = SpreadsheetApp.getUi();
    topUI.createMenu("Mail Merge")
        .addItem("Show Sidebar", "showSidebar")
        .addToUi();
  }
}

在将脚本作为附件运行时,Logger对象似乎也未记录我的消息。

1 个答案:

答案 0 :(得分:0)

将工作表复制到另一个帐户并仅由该帐户拥有(不在团队协作中)确实在将菜单作为带有两种授权类型的附件进行测试时允许菜单出现。执行完此操作后,Google App脚本错误也停止了。

我可以找到的有关Team Drive限制的最紧密相关的信息是this,它表示它限制了云平台的交互。但是this link是Google关于设置和运行“测试为附加组件”的页面,并且没有说明有关Team Drive或云平台的任何信息。