【问题标题】:How do I get the current instance of "this" file in Google Apps Script?如何在 Google Apps 脚本中获取“this”文件的当前实例?
【发布时间】:2014-09-10 03:10:34
【问题描述】:

我正在尝试创建对当前 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 脚本项目的副本,我就不必编辑 Code.gs 或脚本属性中的任何内容。有什么建议吗?

【问题讨论】:

    标签: javascript google-apps-script google-drive-api


    【解决方案1】:

    Apps 脚本可以是独立的,也可以具有 4 个容器之一(现在):Google 表格、文档、表单和站点。如果你事先知道容器的类型,那么很容易得到它的id。例如

    var id = SpreadsheetApp.getActiveSpreadsheet().getId();
    var id = DocumentApp.getActiveDocument().getId();
    var id = FormApp.getActiveForm().getId();
    var id = SitesApp.getActiveSite().getId();
    

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

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

    var file = DriveApp.getFileById(id);
    

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

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

    【讨论】:

    • 我刚刚浏览了 API 文档并尝试提出一些创造性的解决方法。我认为你是对的......这个功能对于 Google Apps 脚本来说有点太“元”了。我怀疑它是否可能或谷歌会启用它。
    【解决方案2】:

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

    application/vnd.google-apps-script

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

    Google Documentation - searchFiles() method

    另见:

    Search Parameters

    我想你会按 mime-type 搜索:

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

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

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

    【讨论】:

    • 我正在考虑类似的解决方案。但是,OP 表示目标是能够在不编辑文件代码或属性中的任何内容的情况下检索文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多