如何在电子表格中调用我的独立脚本?

时间:2013-12-17 20:20:23

标签: google-apps-script google-spreadsheet-api

我已经从Google云端硬盘创建了一个独立的应用脚本,但是当我尝试从Google电子表格中访问它时,我看不到访问脚本的方法(即使我创建脚本时,我创建了它作为电子表格脚本)。

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

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

有没有办法在不将图片发布到图库的情况下执行此操作,我认为将其公开(我没有问题将其公开,但似乎必须有更好的方法)?该脚本为here - 该链接具有全局可读性。它为google电子表格添加了一个菜单,可让您在BigQuery中运行查询并将结果转储到电子表格中。

3 个答案:

答案 0 :(得分:5)

您描述的行为正是它的工作方式...您编写的脚本只有在与电子表格绑定时才能正常工作。

你在一个独立的脚本中编写它的事实使它确实是一个独立的应用程序,但它只能在脚本编辑器中执行,在这个上下文中,onOpen函数就像你编写的那样没有感觉(它在打开文档/电子表格时运行,而不是脚本)。

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

实际上有两种类型的独立应用程序脚本,您尝试过的仅在编辑器中运行的应用程序脚本以及在浏览器窗口中自行部署和运行的Web应用程序。后者始终围绕doGet函数构建,该函数表示应用程序的入口点。您应该阅读documentation on the subject以获取所有详细信息。

总结一下:如果您想使用getActiveSpreadsheet()和类似方法访问电子表格,则必须在脚本编辑器中编写(或粘贴)脚本。

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

Web应用程序当然也可以通过用户界面的优势来实现,您可以根据自己的需求进行调整,但这与您的问题范围相差太远。

希望我(有点)更清楚,至少我试图让它变得简单; - )

答案 1 :(得分:2)

我按照这里的指示与乔丹合作完成了这项工作:

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

  • 首先,他必须与我分享他的独立脚本,所以我有读取权限(可能将脚本设置为公共阅读也可以。)
  • 然后他告诉我他的项目关键。
  • 我拿了他的项目密钥并将其插入"查找图书馆",在"管理图书馆"菜单。
  • 为了实现这一目标,乔丹必须出口"一个版本"他的图书馆 - 所以第三方可以依靠稳定的代码并按照自己的节奏升级。
  • 当Jordan的脚本在onOpen()上自动运行时,我的代码必须定义一个函数onOpen(),它调用了他的脚本onOpen()。为此,库管理器为我提供了导入库的标识符。

导入库后的示例代码,库管理器为您提供库的标识符:

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

答案 2 :(得分:1)

您还可以使用可安装的触发器。如果从独立脚本将可安装的触发器(例如onOpen)安装到文档中,它将获得类似的特权,就像它是一个简单的触发器一样。

更好的是,当可安装触发器从独立脚本调用其函数时,它将在您的独立脚本中执行!因此,它可以调用独立脚本中的任何其他函数。甚至可以从您的独立脚本查看其Logger.log()条目,即使它是从工作表文档中执行的。

基本上,如果你的脚本安装了一个与其中一个函数绑定的onOpen()触发器,那么就像你的Sheets文档需要()你的整个独立脚本文件一样好。

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