【问题标题】:get Drive File ID from a Spreadsheets's published URL in Google Apps Script从电子表格在 Google Apps 脚本中发布的 URL 获取云端硬盘文件 ID
【发布时间】:2019-11-11 08:13:35
【问题描述】:

我有一长串已发布的 Google 电子表格的 URL 列表。 URL 看起来像https://docs.google.com/a/company.com/spreadsheets/d/e/2PACX-[some very long string]/pubhtml?gid=[sheet ID]&single=true&widget=true&headers=false

所有源电子表格都位于我有权访问的共享驱动器上的一个文件夹中。

我需要为每个电子表格获取正常的云端硬盘文件 ID。

我尝试使用UrlFetchApp 打开获取已发布的 URL 文件以查看它是否包含任何可用于提取 Drive File ID 的信息,但出现 401 错误。

是否可以从发布的 URL 中获取内部驱动器文件 ID?

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:
  • 您知道已发布电子表格的 URL。网址如下所示。
    • https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml?gid=0&single=true&widget=true&headers=false
  • 已发布的电子表格将放在与您共享的文件夹中。
  • 您知道共享文件夹的文件夹 ID。网址如下所示。
    • https://drive.google.com/drive/folders/###?usp=sharing
    • ### 是文件夹 ID。
  • 您可以访问共享文件夹。

如果我对您的情况的理解是正确的,那么这个解决方法怎么样?

问题:

很遗憾,无法从https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml?gid=0&single=true&widget=true&headers=false 等已发布的 URL 中直接检索文件 ID。我认为这可能是规范。

解决方法:

因此,根据您的情况,我想提出一个解决方法。此解决方法的流程如下。请认为这只是几个答案之一。

流程:

  1. https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml?gid=0&single=true&widget=true&headers=false 的 URL 中检索 HTML 数据。
  2. 从检索到的 HTML 数据中检索文件名。
    • 在这种情况下,<title>###</title> 中的### 是电子表格的文件名。
  3. 从共享文件夹中检索文件。
  4. 从文件名中检索文件 ID。

当上述流程反映到脚本中时,变为如下。

示例脚本:

使用此脚本时,请设置已发布电子表格的URL和共享文件夹的文件夹ID。

function myFunction() {
  var url = "https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml?gid=0&single=true&widget=true&headers=false"; // URL of the published Spreadsheet.
  var folderId = "###"; // FolderId of shared folder including the published Spreadsheet.

  var res = UrlFetchApp.fetch(url);
  var filename = res.getContentText().match(/<title>(.+)<\/title>/)[1];
  var files = DriveApp.getFolderById(folderId).getFiles();
  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType() == MimeType.GOOGLE_SHEETS && file.getName() == filename) {
      Logger.log("filename: %s, fileId: %s", filename, file.getId())
    }
  }
}

注意:

  • 在此解决方法中,文件 ID 是从文件名中检索的。因此,当共享文件夹中有多个具有相同文件名的文件时,会检索多个文件 ID。届时,请通过比较每个电子表格的数据,检索您想要的文件ID。

参考资料:

如果我误解了您的问题并且此解决方法不是您想要的方向,我深表歉意。

【讨论】:

  • 如果我尝试你所拥有的,UrlFetchApp 会返回一个登录页面。如果我尝试UrlFetchApp.fetch(url, {headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}});,它会说未经授权。我可以从我的浏览器打开 URL,所以我知道它可以工作....
  • 所以我想我想出了一个解决方案。我在 Chrome 中打开了一张已发布的工作表,然后从开发人员控制台我可以对所有已发布的 URL 进行 XMLHttpRequest 调用。所以我只是在开发者控制台中编写了一些代码来调用所有已发布的 URL 并将标题写入控制台日志。这是一个 hack,但它似乎正在工作。
  • @IMTheNachoMan 感谢您的回复。很高兴您的脚本解决了您的问题。对于我的回答,给您带来的不便,我深表歉意。为了确认您的情况,您能否提供发布到网络并公开共享的示例电子表格的 URL?如果你能做到,我想测试一下。因为在我的环境中,当电子表格发布并与我共享时,上面的脚本有效。我认为这个问题的原因可能对其他用户也有用。
猜你喜欢
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2015-09-11
  • 2017-08-14
  • 1970-01-01
  • 2022-10-07
  • 2017-07-13
相关资源
最近更新 更多