多个电子表格的集中式脚本



我创建了一个通知脚本,并希望将其用于多个电子表格(由表单生成)。我希望有一个集中的脚本并在我的多个电子表格上引用它,以简化维护。

我尝试使用如下所示的SpreadsheetApp.openById(),但出于安全原因,此功能似乎已被禁用,不再受支持。

function append()
{
SpreadsheetApp.openById("1xdePF..........................");
}

知道如何对多个电子表格使用相同的脚本吗?

文档指定openById使用给定 ID 打开电子表格

不能使用此方法打开脚本。

要打开应用程序脚本,请转到 https://script.google.com/home/my 并输入您选择的脚本。

对于绑定脚本,打开脚本绑定到的文档并转到Tools->Script Editor

前言

这个答案是对ziganotschka的补充,因为您确实无法通过使用openById()打开该文档来访问绑定到文档的脚本。相反,答案涵盖了您遇到的其他问题,并提出了解决任务的其他方法。

问题

尝试使用openById()时,您会收到以下结构的错误消息:

例外:文档 [此处为 doc ID] 丢失(可能已删除,或者您没有读取权限?

您在评论中提到 id 是 58 个字符(我位是 57 个字符)并从"属性"获得,这解释了错误 - 没有带有此类 id 的电子表格,因为您提取的文件id 和脚本 id不是一回事。如果需要以编程方式提取当前id(此处假定是从绑定到电子表格的脚本调用的,但其他服务也有类似的方法),可以调用getActiveSpreadsheet()->getId()

解决 方案

您说你需要一个维护脚本,那么如何创建一个以任何文档可以访问的方式部署的独立脚本项目:

作为图书馆

任何具有已保存版本的脚本都可以是其他脚本可以使用的库,方法是将其 id 添加到可从菜单访问的列表中Resources->Libraries该库。

作为网络应用程序

任何具有doGetdoPost函数(或两者)的脚本都可以部署为 Web 应用程序,实质上是将其暴露给网络。既然您说电子表格是由表单"生成"的,并且您创建了一个"通知"脚本,我假设您对FormSubmit事件感兴趣。部署为 Web 应用时,会获取一个URL(不要忘记选择适当的权限)。

之后,只需确保:

  1. 每个表单都有一个可安装的onFormSubmit触发器(您可以通过[请参阅文档参考]ScriptApp.newTrigger('callback name').forForm('form ref').onFormSubmit()来安装它)。
  2. 触发器的回调通过UrlFetchApp.fetch()调用 Web 应用 URL,其中包含必要的数据(如电子表格 ID 或任何其他信息)作为查询(如果使用doGet)或请求正文(如果使用doPost)。
  3. 您需要的数据将在命中到doGetdoPost时构造的事件对象中可用[注意避免常见的误解:您无法在编辑器中调试事件对象,它只能实时完成]。

参考

  1. getActiveSpreadsheet()文档
  2. getId()文档
  3. getFileById()文档
  4. 独立脚本指南
  5. 绑定脚本指南
  6. 图书馆指南
  7. 表单提交事件参考
  8. new Trigger()文档
  9. UrlFetchApp.fetch()文档
  10. doGet/doPost事件对象文档

最新更新