获取库的文件ID

时间:2018-01-19 11:04:57

标签: google-apps-script google-sheets

基本案例是2个文件:

  1. 管理员文件。库。
  2. 用户文件。
  3. 我使用库文件作为管理文件,并在其工作表上存储一些设置。在用户文件中,我有一个代码,需要访问管理员文件。

    库中的代码:

    SpreadsheetApp.getActive();
    

    无法正常工作,它会在从库中运行时返回用户文件。

    是否有代码可以访问库文件(电子表格)?

    enter image description here

    我需要这个,因为不想硬编码库的ID,以使其适用于库文件的不同副本。

    我想到了一个类似于Excel的解决方案:

    Set book = ThisWorkbook
    

    Excel中的代码将始终返回代码所在的文件。

1 个答案:

答案 0 :(得分:1)

这个示例脚本怎么样?最近,添加了Google Apps Script API。这样,用户可以轻松管理GAS项目文件。此示例脚本使用此API。

要使用此示例脚本,请执行以下操作。

安装

  • 在API控制台上启用Google Apps脚本API。
    • 如果您已经打开了脚本编辑器,则可以通过this link
    • 访问该编辑器
  • 检索当前范围。
    • 在脚本编辑器上,文件 - >项目属性 - >范围
    • 复制范围。
  • 将范围https://www.googleapis.com/auth/script.projects添加到脚本编辑器的清单文件(appsscript.json)中。 https://www.googleapis.com/auth/script.projects.readonly也可以在这种情况下使用。
    • 在脚本编辑器上,查看 - >显示清单文件
    • "oauthScopes": ["https://www.googleapis.com/auth/script.projects", "https://www.googleapis.com/auth/script.external_request", "### other scopes ###"]添加到a​​ppsscript.json,然后保存。
      • 在此示例中,还需要https://www.googleapis.com/auth/script.external_request
      • 如果您的脚本需要其他范围,请在此处添加。
  • 复制并粘贴此示例脚本,然后运行。请授权。
    • 请输入库的标识符和安装库的项目文件的fileId。

示例脚本:

function fetch(id) {
  var url = "https://script.googleapis.com/v1/projects/" + id + "/content";
  var params = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true
  };
  return JSON.parse(UrlFetchApp.fetch(url, params).getContentText()).files;
}

function main() {
  var Identifier = "### Identifier ###"; // Identifier for the library.
  var fileId = "### fileId ###"; // fileId of project file that the library was installed.

  var files = fetch(fileId);
  var library = files.filter(function(e){return (e.type == "JSON" && e.name == "appsscript")})[0];
  var source = JSON.parse(library.source);
  var libraryId = source.dependencies.libraries.filter(function(e){return e.userSymbol == Identifier})[0].libraryId;
  var libraryCode = fetch(libraryId);
  Logger.log(libraryCode)
}

注意:

  • 此示例脚本的流程如下。
    1. 从已安装库的项目文件的fileId中检索库ID。
    2. 从库ID中检索库代码。
  • libraryCode的结果是json数据。该数据是项目的原始数据。您可以从中检索库代码。

参考文献:

如果我误解了你的问题,我很抱歉。

编辑:

不幸的是,在目前阶段,我认为无法检索在这种情况下安装库的Spreadsheet ID。