使用 Google Apps 脚本库

Mel*_*ter 4 triggers google-sheets google-apps-script google-apps-script-libraries

我已经阅读了所有关于管理和创建库的 Google 文档,但我仍然不知道它们是否适合我试图解决的问题。

我知道如何保存独立脚本的版本。我知道如何通过脚本编辑器将库添加到电子表格中。但我不明白,很简单,如何在新电子表格中触发库脚本。

我有一个电子表格,用作组织内经常复制的模板。该模板包含一个 (onOpen) 访问单独电子表格(主数据库)上的数据并在名为“admin”的选项卡上设置这些值的脚本。期望的结果是在模板表(以及模板表的每个后续副本)中有一个主数据库的副本。此时,模板表有数千份副本,每个副本都运行相同的脚本。

每当我必须更改脚本时,我必须在数千张纸内更改它。我可以改用图书馆吗?我希望能够在库中创建脚本的新版本,并让所有连接到该库的工作表都经历更改。我知道库需要处于开发模式(在每个工作表中)才能做到这一点。我也明白为了进行这个切换,我可能仍然需要进入每个工作表来添加库。我只是希望这将是我最后一次必须完成如此乏味的任务。

任何建议或指向可靠信息的链接表示赞赏。

Zig*_*del 5

除了制作附加组件(已在另一个答案中介绍)之外,我还将回答您的图书馆问题。他们会为你工作。您缺少的是“连接”部分。

为此,您希望从 onOpen 触发库代码。库中的 onOpen 不够用,应用程序脚本未检测到。相反,您电子表格的每个脚本都需要一个 onOpen(e),它只调用 yourlibrary.onOpen(e)。

因为那些“钩子”调用很少改变,特别是一旦你稳定了你的库 api,并且在“开发”模式下使用它会让你只修改库。

每当这些钩子之一需要更改时(比如来自 html GUI 的回调需要一个新参数),您需要更新所有电子表格。为避免这种情况,请让您的所有回调接收单个 json 对象而不是多个参数。


Fat*_*son 5

抱歉,如果我重复其他答案,但我想总结并补充一些内容:

您可以按如下方式访问库函数:

从使用库的应用程序中,您可以转到资源/库。您可以在“标识符”下看到库名称。在同一行您可以选择开发模式。

在资源中找到的库名称

现在在你的库中有一个函数

    function onOpen(e)
   {
     Browser.msgBox("HELLO!"); 
   }
Run Code Online (Sandbox Code Playgroud)

在您希望访问的电子表格应用程序中,您可以使用资源中找到的库名称,例如“testlibrary”

function onOpen(e)
{
  testlibrary.onOpen(e);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您打开了开发模式,只要使用该应用程序的用户在您的库脚本中具有编辑权限,对库中函数的修改就会自动更新到您的应用程序(电子表格)。

如果使用电子表格的任何人对您的库脚本的访问权限受到限制(仅意味着查看访问权限)或应用程序中的开发选择已关闭,则您必须转到应用程序的脚本、资源/库并选择库的最新版本才能每次更新库并保存新版本时都会在应用程序中使用。

不过,特别是如果您主要只使用 onOpen 函数,我建议使用该库,而不是将该函数复制粘贴到每个电子表格的脚本中,因为更容易跟踪哪些脚本是最新的,并且更容易避免脚本之间的错误和差异。

即使在更受限的情况下,如果您更新库中的函数 - 只要您已经在应用程序中调用它 - 您所要做的就是选择所使用的库的新版本。

我希望我在这次谈话中能提供一些东西,并且我的语言是合适的,这是我的第一个答案。