自动创建 Google 驱动器子文件夹中文件的超链接

Automatically Creating Google Drive Hyperlinks of Files Within Subfolders

所以我有下面的脚本,它允许我在同一目录中自动创建 google 文件的驱动器超链接:

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getActiveSheet();
  var c=s.getActiveCell();
  var fldr=DriveApp.getFolderById(*[insert id]*);
  var files=fldr.getFiles();
  var names=[],f,str;
  while (files.hasNext()) {
    f=files.next();
    str='=hyperlink("' + f.getUrl() + '")';
    str2 = f.getName();
    names.push([str2,str]);
  }

  s.getRange(c.getRow(),c.getColumn(),names.length,2).setValues(names);
       
}

但是,我是新手,所以我真的不知道如何通过它来搜索每个子文件夹以及获取它们的超链接。我觉得这可能相对简单,但我对 google 脚本的精通程度不足以做到这一点(如果是 python,我可以轻松做到这一点)。任何帮助将不胜感激。

我相信你的目标如下。

  • 您想检索特定文件夹下的所有文件,并将 URL 和文件名的值放入电子表格。
  • 特定文件夹有子文件夹。
  • 您想使用 Google Apps 脚本实现此目的。

修改点:

  • 在您的脚本中,文件是从特定文件夹下检索的。
  • 为了检索特定文件夹下的所有文件,包括子文件夹,需要遍历所有子文件夹。

当以上几点反映到你的脚本中,就会变成如下。在此修改中,使用Drive service

修改后的脚本:

function myFunction() {
  // Method for retrieving the file list from the specific folder including the subfolders.
  const getAllFiles = (id, list = []) => {
    const fols = DriveApp.getFolderById(id).getFolders();
    let temp = [];
    while (fols.hasNext()) {
      const fol = fols.next();
      temp.push(fol.getId());
      const files = fol.getFiles();
      while (files.hasNext()) {
        const file = files.next();
        list.push([`=hyperlink("${file.getUrl()}")`, file.getName()]);
      }
    }
    temp.forEach(id => getAllFiles(id, list));
    return list;
  }

  const folderId = "###"; // Please set the folder ID.
  const names = getAllFiles(folderId);

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var c = s.getActiveCell();
  s.getRange(c.getRow(), c.getColumn(), names.length, 2).setValues(names);
}

参考文献:

  • Drive Service
  • 关于包含子文件夹的特定文件夹的文件列表, 可能会有用。