Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 列出Google Drive中给定文件夹中所有子文件夹中的文件_Javascript_Google Apps Script - Fatal编程技术网

Javascript 列出Google Drive中给定文件夹中所有子文件夹中的文件

Javascript 列出Google Drive中给定文件夹中所有子文件夹中的文件,javascript,google-apps-script,Javascript,Google Apps Script,我正在尝试改编在上找到的脚本 虽然脚本的创建者可以采用唯一的文件夹名称,但我不能。因此,我做了一些更改,这些更改本应将我的搜索限制在一个文件夹内。问题是,这只涉及一级子文件夹,而不是两级子文件夹。因此,当前,脚本搜索“客户端文档”/“2021-01-25”/“子文件夹1”,然后停止,即使我需要它继续转到“客户端文档”/“2021-01-25”/“子文件夹1”/“子文件夹2” 有没有想过是什么阻止了它进入子文件夹1 function ListFilesandFolders(){ var she

我正在尝试改编在上找到的脚本

虽然脚本的创建者可以采用唯一的文件夹名称,但我不能。因此,我做了一些更改,这些更改本应将我的搜索限制在一个文件夹内。问题是,这只涉及一级子文件夹,而不是两级子文件夹。因此,当前,脚本搜索“客户端文档”/“2021-01-25”/“子文件夹1”,然后停止,即使我需要它继续转到“客户端文档”/“2021-01-25”/“子文件夹1”/“子文件夹2”

有没有想过是什么阻止了它进入子文件夹1

function ListFilesandFolders(){
  var sheet = ss.getActiveSheet();
  var fileno = sheet.getSheetName();
  var filenoFolders = DriveApp.searchFolders("title contains '"+fileno.replace("'","\'")+"' and trashed = false and hidden = false");
  var filenoFolder = filenoFolders.next().getFoldersByName("Internal Documents").next();
  var clientdocsFolders = filenoFolder.getFoldersByName("Disclosure").next().getFoldersByName("Our Client").next().getFolders();
  var clientdocsFolder = filenoFolder.getFoldersByName("Disclosure").next().getFoldersByName("Our Client").next();
  var aorFolder = clientdocsFolder.getFoldersByName("Affidavit of Records").next();
  var tz = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
  var date = Utilities.formatDate(new Date(), tz, "yyyy-MM-dd");
  
  // Find or Create doclist
  var aorFolderlist = aorFolder.getFiles();
  var doclist = "new"
  while (aorFolderlist.hasNext()) {
    var aorFile = aorFolderlist.next();
    if (aorFile.getName().includes("Document List")) {
      var doclist = SpreadsheetApp.open(aorFile);
      // doclist.duplicateActiveSheet().activate();
      // doclist.renameActiveSheet(date);
      // doclist.moveActiveSheet(0)
    }
  }
  if (doclist == "new") {
    var doclist = SpreadsheetApp.create(date + " Document List");
    doclist.renameActiveSheet(date);
    doclist.appendRow(["Document No.", "Document Date", "Document Title", "File Name", "URL", "Folder", "Date Created", "File ID", "File Name (No Date)", "Producible"]);
    DriveApp.getFileById(doclist.getId()).moveTo(aorFolder);
  }

  ListFilesandFolders1F(clientdocsFolders,'',doclist)
}

function ListFilesandFolders1F(fn,rfn,sheet) {
 
  // declare an array to push data into the spreadsheet
  var data = [];
  var count = 1;

  var foldersnext = fn.next();
  Logger.log("THE FOLDER IS "+foldersnext);// DEBUG

  // list files in this folder
  // myfiles is a File Iterator
  var myfiles = foldersnext.getFiles();

  Logger.log("FILES IN THIS FOLDER"); //DEBUG

  // loop through files in this folder
  while (myfiles.hasNext()) {
    var myfile = myfiles.next();
    count = Number(count) + 1;
    var shno = "#";
    var shdate = '=LEFT(D' + count + ',FIND(" ",D' + count + ')-1)';
    var shtitle = '=LEFT(I' + count + ',FIND(".",I' + count + ')-1)';
    var shfilename = '=RIGHT(D' + count + ',LEN(D' + count + ')-FIND(" ",D' + count + '))'; 
    var fname = myfile.getName();
    var fdate = myfile.getDateCreated();
    var fid = myfile.getId();
    var furl = myfile.getUrl();
    // Populate the array for this file
    data = [ 
      shno,
      shdate,
      shtitle,
      fname,
      furl,
      foldersnext,
      fdate,
      fid,
      shfilename
    ];
    //Logger.log("data = "+data); //DEBUG
    sheet.appendRow(data);
  } // Completes listing of the files in the named folder

  // Now get the subfolder
  // subfolders is a Folder Iterator
  var subfolders = foldersnext.getFolders();
  Logger.log("THE SUBFOLDER(S) ARE"); //DEBUG HEADING

  // now start a loop on the SubFolder list
  while (subfolders.hasNext()) {
    var subfolderdata = [];
    var mysubfolders = subfolders.next().getFolders();
    var mysubfolder = mysubfolders.next();  
    
    ListFilesandFolders1F(mysubfolders,rfn +'/'+ mysubfolder,sheet)
  
  }
}
答案如下:

/* Adapted from Code written by @hubgit https://gist.github.com/hubgit/3755293
Updated since DocsList is deprecated  https://ctrlq.org/code/19854-list-files-in-google-drive-folder

Bluexm: added recursion on subfolders */

// List all files and sub-folders in a folder and subfolders Google Drive

// entry function 
function ListFilesandFolders(){
  var sheet = ss.getActiveSheet();
  var fileno = sheet.getSheetName();
  var filenoFolders = DriveApp.searchFolders("title contains '"+fileno.replace("'","\'")+"' and trashed = false and hidden = false");
  var filenoFolder = filenoFolders.next().getFoldersByName("Internal Documents").next();
  var clientdocsFolder = filenoFolder.getFoldersByName("Disclosure").next().getFoldersByName("Our Client").next();
  var aorFolder = clientdocsFolder.getFoldersByName("Affidavit of Records").next();
  var tz = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
  var date = Utilities.formatDate(new Date(), tz, "yyyy-MM-dd");
  
  // Find or Create doclist
  var aorFolderlist = aorFolder.getFiles();
  var doclist = "new"
  while (aorFolderlist.hasNext()) {
    var aorFile = aorFolderlist.next();
    if (aorFile.getName().includes("Document List")) {
      var doclist = SpreadsheetApp.open(aorFile);
      // doclist.duplicateActiveSheet().activate();
      // doclist.renameActiveSheet(date);
      // doclist.moveActiveSheet(0)
    }
  }
  if (doclist == "new") {
    var doclist = SpreadsheetApp.create(date + " Document List");
    doclist.renameActiveSheet(date);
    doclist.appendRow(["Document No.", "Document Date", "Document Title", "File Name", "URL", "Folder", "Date Created", "File ID", "File Name (No Date)", "Producible"]);
    DriveApp.getFileById(doclist.getId()).moveTo(aorFolder);
  }

  ListFilesandFolders1F(clientdocsFolder,'',doclist)
}

function ListFilesandFolders1F(fn,rfn,sheet) {
 
  // declare an array to push data into the spreadsheet
  var data = [];
  var count = 1;

  var foldersnext = fn;
  Logger.log("THE FOLDER IS "+foldersnext);// DEBUG

  // list files in this folder
  // myfiles is a File Iterator
  var myfiles = foldersnext.getFiles();

  Logger.log("FILES IN THIS FOLDER"); //DEBUG

  // loop through files in this folder
  while (myfiles.hasNext()) {
    var myfile = myfiles.next();
    count = Number(count) + 1;
    var shno = "#";
    var shdate = '=LEFT(D' + count + ',FIND(" ",D' + count + ')-1)';
    var shtitle = '=LEFT(I' + count + ',FIND(".",I' + count + ')-1)';
    var shfilename = '=RIGHT(D' + count + ',LEN(D' + count + ')-FIND(" ",D' + count + '))'; 
    var fname = myfile.getName();
    var fdate = myfile.getDateCreated();
    var fid = myfile.getId();
    var furl = myfile.getUrl();
    // Populate the array for this file
    data = [ 
      shno,
      shdate,
      shtitle,
      fname,
      furl,
      foldersnext.getName(),
      fdate,
      fid,
      shfilename
    ];
    //Logger.log("data = "+data); //DEBUG
    sheet.appendRow(data);
  } // Completes listing of the files in the named folder

  // Now get the subfolder
  // subfolders is a Folder Iterator
  var subfolders = foldersnext.getFolders();
  Logger.log("THE SUBFOLDER(S) ARE"); //DEBUG HEADING

  // now start a loop on the SubFolder list
  while (subfolders.hasNext()) {
    var subfolderdata = [];
    var mysubfolders = subfolders.next(); 

    ListFilesandFolders1F(mysubfolders,rfn +'/'+ fn,sheet)
  
  }
}