我即将发布一个应用程序(时间表),最多 80 位用户将在他们自己的时间表上工作,我分享给他们。所有这些工作表当前都包含 2 个脚本(onOpen 和 onEdit),它们支持用户输入他的数据。
现在我担心的是,如果我必须在某个时间点对脚本进行更改,我会更新所有这 80 个脚本。
有没有关于如何做到这一点的最佳实践?我可以为此使用“发布即服务”功能吗?如果是,我如何在这 80 个电子表格中应用此服务?
欢迎任何想法。
亨氏
我即将发布一个应用程序(时间表),最多 80 位用户将在他们自己的时间表上工作,我分享给他们。所有这些工作表当前都包含 2 个脚本(onOpen 和 onEdit),它们支持用户输入他的数据。
现在我担心的是,如果我必须在某个时间点对脚本进行更改,我会更新所有这 80 个脚本。
有没有关于如何做到这一点的最佳实践?我可以为此使用“发布即服务”功能吗?如果是,我如何在这 80 个电子表格中应用此服务?
欢迎任何想法。
亨氏
目前还没有简单、标准的方法来做到这一点。我们都希望问题 40解决后会容易得多。您应该为它加注星标以跟踪更新并为它投票。
现在,有一些解决方法。有一种可能适合你。其中一些在第 40 期评论中有所描述,您应该认真阅读。
第一个是“远程代码获取”。您的 80 个脚本中的每一个都将只有一个框架脚本,该脚本将获取要远程执行的代码。可能存储在“母亲”电子表格的单元格或站点中,您可以从脚本轻松访问的任何地方。这是一个例子:
var sourceScript = 'url-to-your-script-file-hosted-anywhere';
function onEdit() {
eval(UrlFetchApp.fetch(sourceScript).getContentText());
onEditImpl(); //this function is declared on the imported script
}
function onOpen() {
eval(UrlFetchApp.fetch(sourceScript).getContentText());
onOpenImpl(); //this function is declared on the imported script
}
//only hold the API calls that you may do on the imported script
//so there's a nice authorization popup for the user
function stub() {
return;
SpreadsheetApp.openById('').getRange('').setValue('');
CalendarApp.getCalendarById('').createAllDayEvent('', null);
SitesApp.getSite(''); //and so on...
//add/remove all services you'll use here in the stub
//more is better, in case you decide the script have to something new
//you don't have to go and edit each script manually :)
}
另一种可能的解决方法是有一个“模板”电子表格,其中包含脚本。这样您就可以通过再次复制(使用更新的脚本)重新创建所有 80 个电子表格,并将每个文件的值和权限复制到新文件上。这种方法的缺点是所有到文件的链接都会改变。文件、评论、文件夹等的每个用户设置都将丢失。但同样,根据您的使用情况,他们访问文件的方式,例如他们甚至可能没有 Google 帐户,可以将其共享给任何拥有链接的人,该链接位于您的站点中。我不知道场景,它可能适合你。
这就是我能想到的所有限制(使用 onOpen 和 onEdit)。所有这些都非常笨拙且不是真正的解决方案。但就目前而言,这就是我们所得到的。