2013-12-17 28 views
4

我从谷歌云端硬盘中创建一个独立的应用程序脚本,但是当我试图从谷歌电子表格访问它,我不明白的方式来访问脚本(即使当我创建的脚本,我创建它作为一个电子表格脚本)。如何在我的电子表格中调用独立脚本?

在电子表格中,“工具 - >脚本管理器...”菜单项不显示我的剧本,也没有在“工具 - >脚本编辑器...”。后者有一个“最近的项目”部分,但它没有列出我新创建的脚本,也没有列出它的相关项目。

如果我创建电子表格内一个新的脚本(即.Tools->脚本编辑器...)和剪切和粘贴从独立脚本代码,它工作正常。但是,这只能在单个电子表格中使用 - 要从另一个电子表格中使用它,我必须再次剪切并粘贴/通过auth。

有没有办法做到不发布脚本画廊,我假设使得公众(我没有使其成为公共问题,但似乎必须有一个更好的方法)?该脚本是here - 它是链接世界可读的。它向Google电子表格添加了一个菜单,让您可以在BigQuery中运行查询并将结果转储到电子表格中。

回答

2

我与乔丹合作了这一点,下面这些指令:

https://developers.google.com/apps-script/guide_libraries

  • 首先,他不得不与我分享他的独立脚本,所以我已经阅读了它(可能将脚本设置为公开阅读也可以)。
  • 然后他告诉我他的项目密钥。
  • 我把他的项目密钥插入到“查找库”,在“管理库”菜单中。
  • 为了达到这个目的,乔丹不得不出口其“图书馆的一个版本” - 因此第三方可以依靠稳定的代码并按照自己的节奏进行升级。
  • 由于Jordan的脚本在onOpen()上自动运行,我的代码必须定义一个函数onOpen(),它调用onOpen()的脚本。为此,图书馆经理给了我一个导入图书馆的标识符。

示例代码,一旦库进口和库管理器给你的库的标识符:

function onOpen() { 
    GivenLibraryIdentifier.onOpen(); 
    } 
+3

谢谢,嗯。这与我所寻找的更接近,尽管仍然有许多非直观的步骤,至少它让我可以使用我曾经编写过的代码,而且无需剪切并粘贴到任何地方。 –

+1

可能更接近您的预期,但它仍然需要您的电子表格有界脚本中的代码。在开发复杂函数或处理代码版本时,库(以及我建议阅读文档)非常有用,但它并不意味着您的独立脚本“按原样”可用,您仍然需要一个脚本来实际“调用”库函数。此答案中显示的示例代码清楚地显示了我的意思;-) –

2

您所描述的行为正是它打算如何工作...你写的,如果它为界,电子表格只能工作脚本。

事实上,你用独立的脚本编写它确实是一个独立的应用程序,但它只能在脚本编辑器内执行,在这种情况下,你写的那个函数没有意义(它运行时打开文档/电子表格,而不是脚本)。

现在,脚本只能通过复制/粘贴代码绑定到电子表格,至少需要一个您希望使用的脚本(使用菜单和直接函数调用和activeSheet调用),也许有一天谷歌将扩展库的概念,使您的脚本功能可以直接从不同的文档中获得(请阅读doc about libraries)。

实际上有2种类型的独立应用程序的脚本,你试图运行只能从部署,并在浏览器窗口中运行自己的编辑器和web应用中的一个。后者总是围绕代表应用程序入口点的doGet函数构建。您应该阅读documentation on the subject以获取所有详细信息。总结:如果您想使用getActiveSpreadsheet(和类似的方法访问电子表格,那么您必须在脚本编辑器中将脚本编写(或粘贴)到电子表格中。

如果您想拥有一个独立脚本,您还可以与电子表格(以及其他文档)进行交互,但您必须通过其ID访问它们,并且电子表格只能从另一个浏览器窗口进行查看,而不必在它们之间建立链接,并且将不会有“活动电子表格”或“活动工作表”...

当然,webapp也可以通过用户界面的优势来实现,您可以根据自己的需求进行调整,但这会变得有点离你的问题的范围太远了。

希望我做了它(有点)更清晰,至少我试图使它简单;-)

+3

感谢您提供丰富的答案。这似乎很奇怪,从“Drive-> Create-> Script”它可以让你选择为电子表格创建一个脚本,但是在电子表格中没有办法使用该脚本。 –

+0

我想你的问题来自脚本编辑器中的模板,这些模板是通用的,这意味着它们应该在任何上下文中使用(这实际上不可能我害怕)说实话,我很久以前就禁用了该功能,我甚至不知道它们的样子(我应该不时看看我的个人信息:-) btw,thx接受。 –

1

您还可以使用安装的触发器。如果您将独立脚本中的可安装触发器(如onOpen)安装到文档中,它将获得与简单触发器相似的特权。

更好的是,当可安装触发器从独立脚本调用它的函数时,它会在独立脚本中执行!所以它可以在独立脚本中调用任何其他函数。它的Logger.log()条目甚至可以从您的独立脚本查看,即使它是从您的工作表文档执行的。所以基本上,如果你的脚本安装了一个onOpen()触发器与其中一个函数绑定,那么就像你的Sheets文档需要()你的整个独立脚本文件一样好。

(假设脚本的拥有者对该文件具有编辑权限)。

相关问题