如何在 Google Apps Script 中获取“这个”文件的当前实例?

pum*_*mer 4 javascript google-apps-script google-drive-api

我正在尝试创建对当前 DriveApp 文件对象(即脚本本身的实际 Google Drive 容器)的引用。这是我想要做的:

// Assume that thisFile is a FileIterator pointing to THIS file.
// My question in a nutshell: How do I get thisFile?
DriveApp.getFileById( thisFile.getId() );
Run Code Online (Sandbox Code Playgroud)

我想这样做而不是 DriveApp.getFileById(id) 因为我不想“硬编码”脚本文件的 ID 字符串。这样,如果我制作 Google Apps Script 项目的副本,则不必在 Code.gs 或 Script Properties 中编辑任何内容。有什么建议?

Hen*_*reu 5

Apps 脚本可以是独立的,也可以具有 4 个容器之一(现在):Google Sheets、Docs、Forms 和 Sites。如果你事先知道容器的类型,那么很容易得到它的id. 例如

var id = SpreadsheetApp.getActiveSpreadsheet().getId();
var id = DocumentApp.getActiveDocument().getId();
var id = FormApp.getActiveForm().getId();
var id = SitesApp.getActiveSite().getId();
Run Code Online (Sandbox Code Playgroud)

如果您不知道容器类型(这会很奇怪),您可以将它们包装在各种try-catches 中并找出答案。

假设它不是 Google 站点,那么您可以安全地获取此 ID 并使用它来检索容器的DriveApp 文件表示。

var file = DriveApp.getFileById(id);
Run Code Online (Sandbox Code Playgroud)

但这file只是DriveAppAPI 的一个对象,并不是真正this引用,就像编程意义上的那样。您可以使用同样易于使用DocsList或高级的Drive服务来检索同一容器的不同表示。

最后,我不知道如何动态(从自身内部)获取独立脚本的 id。我怀疑这是不可能的。但我也看不出这有什么用。--edit如果你只想复制,为什么不直接抓取一个“固定”的源脚本?


Ala*_*lls 0

如果您单击 Apps 脚本文件,打开右侧的详细信息窗口,然后查看 Apps 脚本的文件详细信息,您将看到类型属性。将指针悬停在该类型的“Google Apps 脚本”一词上,它应该显示:

应用程序/vnd.google-apps-script

我认为你可以搜索文件的类型。 searchFiles(params)

Google 文档 - searchFiles() 方法

另请参阅:

搜索参数

我想你会按哑剧类型搜索:

mimeType = 'application/vnd.google-apps-script'
Run Code Online (Sandbox Code Playgroud)

因此,您可以在用户驱动器中找到所有 Apps 脚本文件,然后如果您可以在 Apps 脚本文件上设置唯一属性,您也可以搜索它。

或者按 进行搜索fullText,其中包括文件描述,并在文件中添加唯一的描述。这样您就一定能找到您创建的应用程序脚本文件。然后,一旦搜索找到该文件,您就可以获得参考。

  • 我正在考虑类似的解决方案。然而,OP 表示,目标是能够检索文档,而无需编辑文件代码或属性中的任何内容。 (2认同)