【问题标题】:Distribute Google Apps Script and push updates分发 Google Apps 脚本并推送更新
【发布时间】:2021-01-28 17:04:00
【问题描述】:

在我们的组织中,我们使用 Google 电子表格作为内部应用的数据输入。我创建了一个 Google Apps 脚本来简化电子表格的修改过程。

如您所见,此脚本依赖于电子表格格式,并提供仅适用于我们组织的非常具体的用途。

我的问题是如何自动将任何更改推送到正在使用它的所有电子表格实例?

我可以将脚本添加到脚本库,但我认为它不适合放置这些类型的脚本,而且如果对主副本的任何更改将推送给客户端,我也找不到信息。

我看到的另一个选项是创建一个包含脚本的电子表格模板,但同样会推送更改吗?

【问题讨论】:

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


    【解决方案1】:

    分发特定(有界)脚本的最简单方法确实是创建一个包含脚本的模板电子表格。如果您的脚本更通用并且任何人都可以使用,那么 Gallery 是合适的。

    现在,无论您如何分发脚本,都没有很好的解决方案可以将更改推送到脚本的副本,因为最终每个“安装”都是独立的副本,与原始副本无关。

    最简单但仍然很麻烦的方法是使用库。您将所有逻辑放在一个库中,并且只将样板文件放在将被复制的脚本中。即onOpenonEdit 函数和存根菜单函数。像这样的:

    function onOpen(e) { return Lib.onOpen(e); }
    function onEdit(e) { return Lib.onEdit(e); }
    function stub1() { return Lib.stub1(); }
    function stub2() { return Lib.stub2(); }
    //etc... as many as you need, than a couple more for future growth
    

    此分布式脚本将导入您的主脚本(Lib),该脚本将包含所有逻辑。例如

    function onOpen(e) {
      e.source.addMenu('Custom Menu', [{name:'Do something', functionName:'stub1'}]);
    }
    
    function onEdit(e) { 
      ;//something 
    }
    
    function stub1() {
      Browser.msgBox('Example');
    }
    

    现在,仍然存在一个问题,即当您更新 Lib 时,您或您的用户必须进入所有具有该脚本的文档的脚本编辑器并手动更新库版本。

    您甚至可以做一些花哨的事情,例如让 onOpen 函数检查 ScriptProperty(您可以轻松地手动更改而无需更新版本)并通知您的用户他们需要更新他们的脚本(即进入脚本编辑器并更新库版本)。

    在导入库时可以设置 开发模式 标志,从而避免进入并更新库版本的需要。但它仅在运行脚本的用户是导入库的开发人员时才有效。也就是说,如果您有自己以外的用户,则必须与他们共享您的库,以授予编辑权限。如果这一切都在您的域下或在朋友之间,这对您来说可能是可以接受的。但这并不是一个确定的解决方案。

    另一种可能的解决方法是使用eval,个人不太喜欢,但可能对您有用。您可以将“逻辑”代码保存在 Google 文档或其他地方,然后在脚本上获取它,然后 eval 它来运行您的函数。您仍然需要在每个脚本上使用一些样板代码,但您的用户无需执行任何操作即可获取更新的代码。您还需要将存根调用添加到您在分布式脚本中的 Apps 脚本中使用的所有服务,以便它提示用户获得所有所需的授权。

    最后,Apps Script issue tracker 上打开的some issues 以某种方式与此相关。您应该给他们“加注星标”以接收更新并为他们投票。我有专门的opened one

    【讨论】:

    • 我的解决方法是将所有对我的库的引用保留在“开发模式”中,并在单独的脚本中进行实际开发。这样,我可以通过将新代码粘贴到所有电子表格使用的官方代码中来发布新代码。
    • @Frederic 是的,我在回答中提到了这一点,但只有在您自己的文件中才有效。如果您为其他用户分发它,您将不得不“过度”与他们共享您的库。如果它在域内或不在域内,这可能是一个有效的解决方法......
    • 感谢您的回答。我非常感谢您的帮助。只有一个问题:如何使用我的 Apps 脚本创建库?
    • 关于如何在库中包含菜单的好主意,谢谢——ScriptProperty 标志以前帮助过我,用户可以按照简单的说明更新他们的库版本——但我仍然希望谷歌能修复ScriptApp 功能(现已损坏),还包括库管理
    • @MartinDimitrov 这是很棒的 Apps 脚本 documentation on libraries
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多