0

我即将发布一个应用程序(时间表),最多 80 位用户将在他们自己的时间表上工作,我分享给他们。所有这些工作表当前都包含 2 个脚本(onOpen 和 onEdit),它们支持用户输入他的数据。

现在我担心的是,如果我必须在某个时间点对脚本进行更改,我会更新所有这 80 个脚本。

有没有关于如何做到这一点的最佳实践?我可以为此使用“发布即服务”功能吗?如果是,我如何在这 80 个电子表格中应用此服务?

欢迎任何想法。

亨氏

4

1 回答 1

1

目前还没有简单、标准的方法来做到这一点。我们都希望问题 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)。所有这些都非常笨拙且不是真正的解决方案。但就目前而言,这就是我们所得到的。

于 2012-05-13T00:22:00.710 回答