从Google电子表格单元格调用Google App脚本库

时间:2012-05-25 18:03:16

标签: google-apps-script google-sheets cell custom-function

在Google电子表格中试用新的库功能。我已经包含一个标识符为“Test”的库,库实现了函数“foo()”

将= Test.foo()输入电子表格单元格会出现错误:“未知函数名称TEST.FOO”

如果我在电子表格中创建一个函数来包装库函数:

function foo()
{
  return Test.foo();
}

然后在我的speadsheet单元格中使用= foo(),一切都很好。为所有库函数创建包装器函数,以便它们可以在电子表格单元格中使用,这使得使用不太理想的库。有没有办法从电子表格单元调用库函数?

2 个答案:

答案 0 :(得分:4)

目前还没有办法直接将这些库函数称为单元格中的自定义函数。正如您所做的那样,创建包装器是目前执行此操作的方法。如果您希望能够直接将库函数作为自定义函数调用,请在Issue Tracker上将其作为一个问题提出。

答案 1 :(得分:2)

这是一种解决方法,允许您在粘贴此通用包装函数时调用任何库函数。然后你可以从电子表格中调用它。

例如,如果我有一个名为MyLib的库,其函数为add(x,y)(假设x在单元格A1中,y在单元格A2中),我可以像这样调用它: = LIB_FUNC(“MyLib”,“add”,A1,A2)。

这有点难看,但至少允许我只需要粘贴这个函数然后访问任何库函数。请注意,这取决于调用包装函数时范围内的“this”对象的未记录结构。这可能会随着时间的推移而破裂。可能会看我是否可以将其作为附加内容发布。

function LIB_FUNC(libraryName, functionName) {
  var result;
  var lib = this[libraryName];
  var extraArgs = [];

  if (lib) {
    var func = lib[functionName];

    if (func) {
      if (arguments.length > 2) {
        extraArgs = Array.apply(null, arguments).slice(2);
      }

      result = func.apply(this, extraArgs);
    } else {
      throw "No such function: " + functionName;
    }
  } else {
    throw "No such library: " + libraryName;
  }

  return result;
}