4

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

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

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

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

感谢您提供任何建议或指向可靠信息的链接。

4

3 回答 3

5

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

为此,您想从 onOpen 触发库代码。库中的 onOpen 是不够的,apps 脚本没有检测到。相反,每个电子表格的脚本都需要一个 onOpen(e),它只调用 yourlibrary.onOpen(e)。

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

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

于 2017-06-27T16:42:09.633 回答
4

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

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

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

在资源中找到的库名称

现在在您的库中,您有例如一个函数

    function onOpen(e)
   {
     Browser.msgBox("HELLO!"); 
   }

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

function onOpen(e)
{
  testlibrary.onOpen(e);
}

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

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

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

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

我希望我在这次谈话中有什么可以给出的,而且我的语言是合适的,这是我的第一个答案..

于 2017-06-27T19:01:53.277 回答
-1

一个很好的问题,梅莉。我已经阅读了有关此主题的大量文档和一些教程,但还没有尝试添加任何库。我的理解是,一旦你连接到一个库,你所要做的就是调用适用的函数。一旦连接了库,库中的函数就成为脚本编辑器中所有其他可用的 Apps Script 类的扩展。

于 2017-06-27T15:50:16.353 回答