我發現一個腳本可以完美地適用于我的驅動器,我想適應它也支持共享驅動器。
function onOpen() {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
ui.createMenu('List Files/Folders')
.addItem('List All Files and Folders', 'listFilesAndFolders')
.addToUi();
};
function listFilesAndFolders(){
var folderId = Browser.inputBox('Enter folder ID', Browser.Buttons.OK_CANCEL);
if (folderId === "") {
Browser.msgBox('Folder ID is invalid');
return;
}
getFolderTree(folderId, true);
};
// Get Folder Tree
function getFolderTree(folderId, listAll) {
try {
// Get folder by id
var parentFolder = DriveApp.getFolderById(folderId);
// Initialise the sheet
var file, data, sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Full Path", "Name","Type" ,"Date", "URL", "Last Updated", "Description", "Size","Owner Email"]);
// Get files and folders
getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);
} catch (e) {
Logger.log(e.toString());
}
};
// Get the list of files and folders and their metadata in recursive mode
function getChildFolders(parentName, parent, data, sheet, listAll) {
var childFolders = parent.getFolders();
// List folders inside the folder
while (childFolders.hasNext()) {
var childFolder = childFolders.next();
var folderId = childFolder.getId();
data = [
parentName "/" childFolder.getName(),
childFolder.getName(),
"Folder",
childFolder.getDateCreated(),
childFolder.getUrl(),
childFolder.getLastUpdated(),
childFolder.getDescription(),
childFolder.getSize()/1024,
childFolder.getOwner().getEmail()
];
// Write
sheet.appendRow(data);
// List files inside the folder
var files = childFolder.getFiles();
while (listAll & files.hasNext()) {
var childFile = files.next();
data = [
parentName "/" childFolder.getName() "/" childFile.getName(),
childFile.getName(),
"Files",
childFile.getDateCreated(),
childFile.getUrl(),
childFile.getLastUpdated(),
childFile.getDescription(),
childFile.getSize()/1024,
childFile.getOwner().getEmail(),
];
// Write
sheet.appendRow(data);
}
// Recursive call of the subfolder
getChildFolders(parentName "/" childFolder.getName(), childFolder, data, sheet, listAll);
}
};
老實說,我仍然不完全了解如何
{supportsAllDrives: true}
有效,但我會假設它正是缺少的。
我一直在嘗試獲取有關它的更多資訊,但我發現的內容對我來說并不完全有用,也不是關于如何使用它的完整解釋。
我對 Apps Script 很陌生,但我正在盡我所能制作完全可操作的代碼或至少理解它,所以如果有人能將我鏈接到任何關于它的好頁面,我將不勝感激。
uj5u.com熱心網友回復:
{supportsAllDrives: true}用于 Drive API。但是,幸運的是,在現階段,當使用檔案ID和檔案夾ID時,可以使用Drive服務(DriveApp)檢索共享驅動器中的檔案和檔案夾。但不幸的是,無法檢索檔案和檔案夾的所有者。我認為這可能是您當前的放映腳本問題的原因。如果我的理解是正確的,那么下面的修改呢?
從:
data = [
parentName "/" childFolder.getName(),
childFolder.getName(),
"Folder",
childFolder.getDateCreated(),
childFolder.getUrl(),
childFolder.getLastUpdated(),
childFolder.getDescription(),
childFolder.getSize()/1024,
childFolder.getOwner().getEmail()
];
到:
var ownerOfFolder = childFolder.getOwner();
data = [
parentName "/" childFolder.getName(),
childFolder.getName(),
"Folder",
childFolder.getDateCreated(),
childFolder.getUrl(),
childFolder.getLastUpdated(),
childFolder.getDescription(),
childFolder.getSize()/1024,
ownerOfFolder ? ownerOfFolder.getEmail() : ""
];
另外,請進行如下修改。
從:
data = [
parentName "/" childFolder.getName() "/" childFile.getName(),
childFile.getName(),
"Files",
childFile.getDateCreated(),
childFile.getUrl(),
childFile.getLastUpdated(),
childFile.getDescription(),
childFile.getSize()/1024,
childFile.getOwner().getEmail(),
];
到:
var ownerOfFile = childFile.getOwner();
data = [
parentName "/" childFolder.getName() "/" childFile.getName(),
childFile.getName(),
"Files",
childFile.getDateCreated(),
childFile.getUrl(),
childFile.getLastUpdated(),
childFile.getDescription(),
childFile.getSize()/1024,
ownerOfFile ? ownerOfFile.getEmail() : "",
];
筆記:
- 當我測驗您的腳本反映了對共享驅動器的上述修改時,我可以確認該腳本有效。
uj5u.com熱心網友回復:
我有一個功能可以將資訊復制到我的作業表中,它只需要一個檔案夾。您可以根據需要進行修改:
啟動功能:
function AddDataValidation(){
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const folder = DriveApp.getFolderById("folder id");
getFnF(folder);
}
遞回函式:
var level = 1;
function getFnF(folder = DriveApp.getRootFolder()) {
const ss = SpreadsheetApp.getActive();//active spreadsheet
const sh = ss.getSheetByName('Sheet0')//change sheet name
const files = folder.getFiles();
sh.getRange(sh.getLastRow() 1, level).setValue(folder.getName()).setFontWeight('bold');
if (files.hasNext()) {
sh.getRange(sh.getLastRow() 1, level).setValue('Files:');
}
while (files.hasNext()) {
let file = files.next();
let firg = sh.getRange(sh.getLastRow() 1, level 1);
firg.setValue(Utilities.formatString(file.getName()));
}
const subfolders = folder.getFolders()
while (subfolders.hasNext()) {
let subfolder = subfolders.next();
level ;
getFnF(subfolder);
}
level--;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434972.html
