我已阅读有关管理和创建库的所有Google文档,但我仍然不知道它们是否适合我正在尝试解决的问题。
我知道如何保存独立脚本的版本。我知道如何通过脚本编辑器将库添加到电子表格中。但是,我不明白,如何在新电子表格中触发库脚本。
我有一个电子表格,在我的组织中作为经常复制的模板。该模板包含一个脚本(onOpen)访问单独的电子表格(主数据库)上的数据,并在名为“admin”的选项卡上设置这些值。期望的结果是使主数据库的副本存在于模板表内(以及模板表的每个后续副本)。此时,模板表有数千个副本,每个副本都运行相同的脚本。
每当我必须更改脚本时,我必须在数千页内更改它。我可以使用库吗?我希望能够在库中创建新版本的脚本,并且所有连接到该库的工作表都会遇到更改。我知道库需要处于开发模式(在每个工作表内)才能执行此操作。我也明白,为了进行这种切换,我可能仍然需要进入每个工作表来添加库。我只是希望这是我最后一次做这么乏味的工作。
我们非常感谢任何有关可靠信息的建议或链接。
答案 0 :(得分:2)
除了添加附件(已在另一个答案中介绍)之外,我将回答您的图书馆问题。他们会为你工作。你缺少的是“连接”部分。
为此你想要触发来自onOpen的库代码。库中的onOpen是不够的,应用程序脚本无法检测到。相反,每个电子表格的脚本都需要一个onOpen(e),它只需要调用yourlibrary.onOpen(e)。
因为那些“钩子”调用很少改变,特别是一旦稳定了库api,并且在“开发”模式下使用它就会让你只修改库。
每当其中一个挂钩需要更改时(比如来自html GUI的回调需要一个新参数),您需要更新所有电子表格。要避免这种情况,请使所有回调接收单个json对象而不是多个参数。
答案 1 :(得分:2)
很抱歉,如果我重复其他答案,但我想总结并添加一些内容:
您可以按如下方式访问库函数:
使用该库从应用程序转到资源/库。您可以在"标识符"下看到库名称。在同一行,您可以选择开发模式。
Library name found in resources
现在您的库中有一个函数
function onOpen(e)
{
Browser.msgBox("HELLO!");
}
在您希望访问它的电子表格应用中,您可以使用资源中找到的库名称,例如" testlibrary"
function onOpen(e)
{
testlibrary.onOpen(e);
}
现在,如果您启用了开发模式,只要使用该应用程序的用户在您的库脚本中具有编辑权限,库中功能的修改就会自动更新到您的应用程序(电子表格)。 < / p>
如果使用您的电子表格的任何人对您的库脚本具有受限访问权限(意味着只有视图访问权限)或者应用程序中的开发选择已关闭,您必须转到应用程序的脚本,资源/库并选择每次更新库并保存新版本时,将在应用程序中使用的库的最新版本。
仍然,特别是如果你主要只使用onOpen函数,我建议使用库而不是将函数复制粘贴到每个电子表格的脚本,因为它更容易跟踪哪些脚本是最新的,它更容易避免脚本之间的错误和差异。
即使在更受限制的情况下,如果您更新库中的功能 - 只要您已经在应用程序中调用它 - 您所要做的就是选择所用库的新版本。
我希望我在这次谈话中有任何意义,我的语言是恰当的,这是我的第一个答案..
答案 2 :(得分:-1)
一个好问题梅利。我已经浏览了大量关于此主题的文档和一些教程,但尚未尝试添加任何库。我的理解是,一旦连接到库,您只需调用适用的函数即可。一旦连接了库,库中的函数就成为脚本编辑器中所有其他Apps Script类的扩展。