从Google Apps脚本中电子表格的已发布URL获取驱动器文件ID

时间:2019-06-30 05:41:27

标签: google-apps-script google-sheets

我有一堆Google Spreadsheets的已发布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打开获取已发布的U​​RL文件,以查看它是否具有可用于提取驱动器文件ID的任何信息,但出现401错误。

是否有从发布的URL获取内部驱动器文件ID的信息?

1 个答案:

答案 0 :(得分:1)

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

如果我对您的情况的理解正确,那么该解决方法如何?

问题:

不幸的是,无法直接从发布的URL(如https://docs.google.com/spreadsheets/d/e/2PACX-###/pubhtml?gid=0&single=true&widget=true&headers=false)中检索文件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。

参考:

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