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