如何获取"this"的当前实例?文件在谷歌应用程序脚本

How do I get the current instance of "this" file in Google Apps Script?

本文关键字:quot 实例 文件 脚本 应用程序 谷歌 this 何获取 获取      更新时间:2023-09-26

我试图创建一个对当前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() );

我想这样做,而不是DriveApp.getFileById(id),因为我不想要"硬编码"id字符串的脚本文件。这样,如果我复制了Google Apps Script项目,我就不需要在代码中编辑任何东西。gs或脚本属性。有什么建议吗?

Apps Script可以是独立的,也可以有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();

如果你不知道容器类型(这会很奇怪),你可以把它们包装在各种try-catch中,并找出

假设它不是一个谷歌网站,那么你可以安全地得到这个id,并使用它来检索容器的DriveApp文件表示。

var file = DriveApp.getFileById(id);

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

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

如果你点击你的Apps Script文件,打开右边的详细信息窗口,查看Apps Script的文件详细信息,你会看到一个type属性。将鼠标悬停在"Google Apps Script"字样上,应该会显示:

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

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

Google Documentation - searchFiles()方法

也看到:

搜索参数

我想你应该按时间类型搜索:

mimeType = 'application/vnd.google-apps-script'

所以,你可以找到所有的Apps Script文件,在用户驱动器中,然后如果你可以在Apps Script文件上设置一个唯一的属性,你也可以搜索那个。

或按包含文件描述的fullText搜索,并在文件中放置唯一的描述。这样,您将确保找到您创建的应用程序脚本文件。然后,一旦搜索找到了文件,您就有了您的参考。