为了在文件夹中创建文件,您需要在创建文件时找到父文件夹并将其传递给DriveApp。通常,文件路径的格式为“ /path/to/file/file.js”,因此在将文件保存到GDrive时保持相同的结构是有意义的。以下代码接受完整的文件路径,并在该文件夹中创建一个新文件。
下一个明显的问题是如何创建电子表格。不幸的是,您无法使用DriveApp创建它,而需要使用SpreadsheetApp。另外,由于电子表格应用程序无法在文件夹中创建文件,因此您需要创建电子表格,然后将其移动到正确的文件夹中。我通常使用类似的逻辑创建一个单独的函数以找到正确的文件夹,然后更新创建逻辑以使用SpreadsheetApp代替DriveApp。有关示例,请参见第二个功能。
谢谢,
拉斯
/****************************************** * Create File in a Specific Folder Path * Version 1.0 * Created By: 拉斯 Savage * FreeAdWordsScripts.com ******************************************/ function 创造File(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; }并创建电子表格:
/****************************************** * Create Spreadsheet in a Specific Folder Path * Version 1.0 * Created By: 拉斯 Savage * FreeAdWordsScripts.com ******************************************/ function 创造Spreadsheet(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()); } // 创造s in folder var 电子表格 = SpreadsheetApp.create(parentName); var file = DriveApp.getRootFolder().getFilesByName(parentName).next(); folder.addFile(file); DriveApp.getRootFolder().removeFile(file); return 电子表格; } 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()); } // 创造s 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; }