// Get Folders Only
function foldersOnly(folderID, dataArr, extractFolderSheet, i) {
var parentFolder = DriveApp.getFolderById(folderID);
var parentFolderName = parentFolder.getName();
var data;
childFoldersOnly(parentFolderName, parentFolder, data, dataArr, extractFolderSheet, i);
}
// Get the details - Folders Only
function childFoldersOnly(parentFolderName, parentFolder, data, dataArr, extractFolderSheet, i) {
var child_Folders = parentFolder.getFolders();
// List folders inside the folder
while (child_Folders.hasNext()) {
var child_Folder = child_Folders.next();
// if the folder is empty, post a message ----> Is this the correct way to check it? I keep getting: "TypeError: Cannot read property "length" from undefined."
if (child_Folder.getFolders().hasNext() == false) {
extractFolderSheet.getRange(i + 2, 3).setValue("No Folders Found!");
}
var child_FolderName = child_Folder.getName();
var data = [parentFolderName + "/" + child_FolderName, child_FolderName,child_Folder.getId(),child_Folder.getUrl()];
dataArr.push(data);
}
}
function get_FoldersOnly() {
try {
var extractFolderSheet = SpreadsheetApp.getActive().getSheetByName('SHEETNAME_HERE');
var extractFolderSheetVals = extractFolderSheet.getRange(2, 1, extractFolderSheet.getLastRow(), extractFolderSheet.getLastColumn()).getValues();
for (var i = 0; i < extractFolderSheetVals.length - 1; i++) {
var folderID = extractFolderSheetVals[i][0];
var folderName = extractFolderSheetVals[i][1];
var status2 = extractFolderSheetVals[i][2];
var statusMsg2 = ["Done", "Exception: No item with the given ID could be found. Possibly because you have not edited this item or you do not have permission to access it.", "TypeError: Cannot read property 'getEmail' of null", "TypeError: Cannot read property 'length' of undefined", "Exception: Specified sleep period exceeds maximum.", "No Folders Found", 'TypeError: Cannot call method "getRange" of undefined.'];
if (folderName == "" && folderID != "" || folderName != "" && folderID == "") {
var ui = SpreadsheetApp.getUi();
ui.alert('Error', 'Please enter the folder name and folder id!', ui.ButtonSet.OK)
return;
}
else if (statusMsg2.indexOf(status2) + 1) {
continue;
}
else {
var dataArr = [];
foldersOnly(folderID, dataArr);
/* Create new sheet to save the output */
var createNewSheet = SpreadsheetApp.create(folderName);
var createNewSheetID = createNewSheet.getId();
var createNewSheetName = createNewSheet.getName();
var sheet1 = createNewSheet.getSheetByName('Sheet1');
sheet1.getRange(2, 1, 1, 4).setValues([["Folder Path", "Folder Name", "Folder ID", "URL"]]).setBackground('#202020').setFontColor('white');
// Save data //
sheet1.getRange(3, 1, dataArr.length, dataArr[0].length).setValues(dataArr);
SpreadsheetApp.flush();
/* Mark as done when complete */
extractFolderSheet.getRange(i + 2, 3).setValue("Done");
}
}
}
catch (e) {
extractFolderSheet.getRange(i + 2, 3).setValue(e); ----> If I get any errors, I'd like the code to post the error message then continue to the next folder (row)
and run the same code above. Is that possible?
}
}