【问题标题】:Calling a Google App Script library from a Google spreadsheet cell从 Google 电子表格单元格调用 Google App 脚本库
【发布时间】:2012-06-01 07:46:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多