分发Google Apps脚本并推送更新

时间:2013-06-08 07:41:11

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

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

如您所见,此脚本依赖于电子表格格式,仅供适用于我们组织的特定用途。

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

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

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

1 个答案:

答案 0 :(得分:6)

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

现在,没有很好的解决方案来推动脚本副本的更改,无论你如何分发你的脚本,因为最后每个“安装”都是一个独立的副本,而不是与原始副本相关联。

最简单但仍然很麻烦的方法是使用库。将所有逻辑放在库中,并且只将脚本放在要复制的脚本中。即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)。 e.g。

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脚本中使用的所有服务添加存根调用,这样就会提示用户获得所需的所有授权。

最后,在some上打开的issues Apps Script issue tracker以这种或那种方式与此相关。你应该“明星”他们接收更新和投票给他们。我特别为此opened one