如何在大量电子表格中最好地维护脚本?

时间:2012-05-12 09:26:13

标签: google-apps-script

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

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

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

欢迎任何人欢迎。

亨氏

1 个答案:

答案 0 :(得分:1)

还没有简单,标准的方法来做到这一点。我们都希望issue 40解决后会更容易。你应该对其进行加星标记以跟踪更新和投票类型。

现在,有一些解决方法。一个人可能适合你。其中一些是在issue 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)。所有非常笨拙而不是真正的解决方案。但就目前而言,这就是我们得到的全部。