如何以编程方式创建Google Spreadsheets为补充工具栏?

时间:2016-05-17 21:08:54

标签: google-apps-script google-apps

背景

  1. 我使用node-google-apps-script
  2. 进行了脚本项目
  3. 我有一个Rails应用程序,它使用脚本项目来使用 REST执行API 创建电子表格。它通过克隆模板Spreadsheet来实现这一点。
  4. My Rails应用程序偶尔也会使用 REST执行API
  5. 将数据推送到电子表格
  6. 脚本项目使用发布>部署为API可执行文件... 进行私密发布, Rails应用使用API​​可执行文件ID与它交谈。
  7. 上述所有工作都相当不错,发展也不是太繁重。

    现在我希望生成的电子表格有侧边栏。到目前为止我发现的替代方案似乎都有问题:

    备选方案1:发布私人附加组件

    我知道我可以让我的客户端让我成为他们谷歌应用程序域的管理员,然后我可以将脚本项目发布为受域限制的附加组件。对于开发和发展而言,这种替代方案似乎很繁琐。用法:

    • 加载项最多需要一个小时才能发布。发布脚本项目的版本现在是两个手动例程,无法自动化
    • 尽我所知,我无法以编程方式将附加组件添加到电子表格中。它必须在使用前安装在每个电子表格中。

    备选方案2:为模板电子表格提供绑定脚本

    我可以为模板电子表格提供绑定脚本。显然,这将被复制。 绑定脚本无法与node-google-apps-script一起使用,因此我将无法使用copy&粘贴更新。对脚本的更新需要手动更新每个现有的电子表格!但是,我可以将侧边栏设置为从脚本项目中提取实际内容的骨架。

    有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

基本上,您可以做的是将编程的所有侧边栏创建部分绑定到您创建的库。在您使用的模板化电子表格中,您只需执行以下操作:

  1. 使用库脚本的Project Key将库添加到容器绑定脚本中。
  2. 添加一个简单的onOpen函数来创建一个菜单,然后调用库创建侧边栏功能。
  3. 由于侧边栏可能调用的所有服务器端函数都将包含在库中,因此您需要添加一个函数处理程序,该函数处理程序在库中调用正确的函数,以便在使用{{{ 1}}例如:
  4. 图书馆职能:

    google.script.run

    容器绑定处理程序:

    function getSomeNum() {
      return 3;
    }
    
    function doSomething(e) {
      return e.num * 2;
    }
    
    var runFunction = {
      getSomeNum : getSomeNum,
      doSomething : doSomething
    };
    
    function runHandler(functionName, parameters) {
      return runFunction[functionName](parameters);
    }
    

    来自侧边栏的示例google.script.run调用:

    function runHandler(functionName, parameters) {
      return MyLibraryIdentifier.runHandler(functionName, parameters);
    }
    

    请记住,任何需要使用此侧边栏的用户必须至少具有对该库的查看权限。我最终做的是为任何人部署API Executable,然后将脚本的共享设置为public-view,但必须有链接。这是唯一可以让它成为多个用户的东西。

    另一个缺点是更新库的代码时,除非您更改它们正在使用的库版本,否则不会更新容器绑定脚本。这意味着用户必须主动寻找更新的库版本。在更新API可执行文件时,该菜单给您的印象是您可以只更新当前版本,但我没有任何运气来实际获取它以反映更改(也许我只是没有耐心)。 / p>

    至少应该为您提供开始测试的基线。