未找到Google Apps脚本库嵌套函数

时间:2016-03-23 10:26:20

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

我有一个包含以下代码的库

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Generate Code')
      .addItem('iOS', 'generateIOS')
      .addItem('Android', 'generateAndroid')
      .addToUi();
}

并且我在同一个库中的另一个文件中

function generateAndroid(){
  generateFile('Android');
}

function generateIOS(){
  generateFile('iOS');  
}

现在,我在脚本

中使用该库
function onOpen(){
 Library.onOpen(); 
}

但是我得到了

Script function not found: generateIOS For more information, see https://developers.google.com/apps-script/reference/base/menu#addItem(String,String)

如果我在脚本中使用库创建了一个generateIOS函数,它就可以正常工作。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

generateAndroid()generateIOS()不存在于全局命名空间中,它们存在于库的命名空间中。因此,当您向UI中添加项目时,会调用" generateIOS"和" generateAndroid",脚本尝试从与onOpen()相同的上下文中运行它们,但无法找到它们。请记住,addItem()会将一对字符串作为参数,因此它的功能非常愚蠢,并且不知道您是指"图书馆"功能而不是全局功能。

我看到有两种可能的解决方案:

1)添加简单地将函数调用传递给Library的全局函数。

// inside the global context
function generateAndroid(){
    Library.generateAndroid();
}
function generateIOS(){
    Library.generateIOS();
}

2)尝试将Library命名空间添加到addItem()字符串中(注意:我不知道这是否会起作用,但它值得一试。

.addItem('iOS', 'Library.generateIOS')
.addItem('Android', 'Library.generateAndroid')