In order to create a file in a folder, you will need to find the parent folder and pass it to the DriveApp when you create the file. Normally, file paths are in the form of "/path/to/file/file.js", so it makes sense to keep that same construct when saving files to GDrive. The following code accepts the full file path and creates a new file in that folder.
The next obvious question is how to create a spreadsheet. Unfortunately, you can't create it using the DriveApp, you need to use the SpreadsheetApp. Also, since the spreadsheet app cannot create files in a folder, you will need to create the spreadsheet, then move it to the correct folder. I usually create a separate function with similar logic to find the correct folder, then update the create logic to use SpreadsheetApp instead of DriveApp. See the second function for an example.
Thanks,
Russ
/****************************************** * Create File in a Specific Folder Path * Version 1.0 * Created By: Russ Savage * FreeAdWordsScripts.com ******************************************/ function createFile(filePath) { var pathArray = filePath.trim().split('/'); var folder; for(var i in pathArray) { var parentName = pathArray[i]; if(!parentName || parentName === '') { continue; } // in the root folder // source: http://goo.gl/P0LQ86 if(filePath.indexOf(parentName, filePath.length - parentName.length) !== -1) { // This is creating the actual file if(folder) { if(folder.getFilesByName(parentName).hasNext()) { Logger.log('Using existing file: '+parentName); return folder.getFilesByName(parentName).next(); } return folder.createFile(parentName,''); } else { if(DriveApp.getRootFolder().getFilesByName(parentName).hasNext()) { Logger.log('Using existing file: '+parentName); return DriveApp.getRootFolder().getFilesByName(parentName).next(); } return DriveApp.getRootFolder().createFile(parentName,''); } } if(!folder && !DriveApp.getRootFolder().getFoldersByName(parentName).hasNext()) { Logger.log('Creating folder: '+parentName); folder = DriveApp.getRootFolder().createFolder(parentName); } else if(folder && !folder.getFoldersByName(parentName).hasNext()) { Logger.log('Creating folder: '+parentName); folder = folder.createFolder(parentName); } else { Logger.log('Using existing folder: '+parentName); folder = (!folder) ? DriveApp.getRootFolder().getFoldersByName(parentName).next() : folder.getFoldersByName(parentName).next(); } } // Should never get here throw "Invalid file path: "+filePath; }And to create a spreadsheet:
/****************************************** * Create Spreadsheet in a Specific Folder Path * Version 1.0 * Created By: Russ Savage * FreeAdWordsScripts.com ******************************************/ function createSpreadsheet(filePath) { var pathArray = filePath.trim().split('/'); var folder; for(var i in pathArray) { var parentName = pathArray[i]; if(!parentName || parentName === '') { continue; } // in the root folder // source: http://goo.gl/P0LQ86 if(filePath.indexOf(parentName, filePath.length - parentName.length) !== -1) { // This is creating the actual file if(folder) { if(folder.getFilesByName(parentName).hasNext()) { Logger.log('Using existing file: '+parentName); var file = folder.getFilesByName(parentName).next(); return SpreadsheetApp.openById(file.getId()); } // creates in folder var spreadsheet = SpreadsheetApp.create(parentName); var file = DriveApp.getRootFolder().getFilesByName(parentName).next(); folder.addFile(file); DriveApp.getRootFolder().removeFile(file); return spreadsheet; } else { if(DriveApp.getRootFolder().getFilesByName(parentName).hasNext()) { Logger.log('Using existing file: '+parentName); var file = DriveApp.getRootFolder().getFilesByName(parentName).next(); return SpreadsheetApp.openById(file.getId()); } // creates in root folder return SpreadsheetApp.create(parentName); } } if(!folder && !DriveApp.getRootFolder().getFoldersByName(parentName).hasNext()) { Logger.log('Creating folder: '+parentName); folder = DriveApp.getRootFolder().createFolder(parentName); } else if(folder && !folder.getFoldersByName(parentName).hasNext()) { Logger.log('Creating folder: '+parentName); folder = folder.createFolder(parentName); } else { Logger.log('Using existing folder: '+parentName); folder = (!folder) ? DriveApp.getRootFolder().getFoldersByName(parentName).next() : folder.getFoldersByName(parentName).next(); } } // Should never get here throw "Invalid file path: "+filePath; }