Quiero crear una nueva carpeta con un nuevo nombre desde la celda en la hoja, y quiero copiar en esta carpeta los archivos y carpetas con el destino de origen.
Me podrian ayudar a solucionar mi problema.
¿Es posible cambiar el nombre de nueva carpeta sin cambiar el nombre de las carpetas y subcarpetas, después de su creación?
function copyFolderass() { const sourceFolder = DriveApp.getFolderById(''); const destinyFolder = DriveApp.getFolderById(''); copyFolder(sourceFolder, destinyFolder); } function copyFolderContents(source, target) { const filesIterator = source.getFiles(); while (filesIterator.hasNext()) { const file = filesIterator.next(); file.makeCopy(file.getName(), target); } } function copyFolder(sourceFolder, destinyFolder) { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("nameFile"); var name = ss.getRange("F4").getValue(); const newFolder = destinyFolder.createFolder(sourceFolder.getName()); copyFolderContents(sourceFolder, newFolder); const foldersIterator = sourceFolder.getFolders(); while (foldersIterator.hasNext()) { const folder = foldersIterator.next(); copyFolder(folder, newFolder); } }Lee una hoja para obtener FilesFolder Id FolderFolder Id y nuevo FolderName
Crea la nueva carpeta y copia todos los archivos de la Carpeta de archivos a la carpeta recién creada.
Registra la nueva identificación de la carpeta en la columna FolderId.
Registra todos los identificadores de archivo en la columna FileIds.
Puso la fecha en la columna creada.
No hace nada por las filas que tienen contenido en Creado
//FilesFolder FolderFolder FolderName FolderId FileIds Created function createFolderAndCopyFiles() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet0"); const shsr = 2; let [hA, ...vs] = sh.getDataRange().getValues(); let idx = {}; let col = {}; hA.forEach((h, i) => { idx[h] = i; col[h] = i + 1; }); vs.forEach((r, i) => { if (!r[idx["Created"]]) { let dfldr = DriveApp.getFolderById(r[idx["FolderFolder"]]); let fldr = dfldr.createFolder(r[idx["FolderName"]]); let fldrid = fldr.getId(); sh.getRange(i + shsr, col["FolderId"]).setValue(fldrid); let files = DriveApp.getFolderById(r[idx["FilesFolder"]]).getFiles(); let ids = []; while (files.hasNext()) { let file = files.next(); let fid = file.getId(); file.makeCopy(file.getName(), fldr); ids.push(fid); } sh.getRange(i + shsr, col["FileIds"]).setValue(ids.join('\n')); sh.getRange(i + shsr, col["Created"]).setValue(new Date()); } }); }Usted completa las cosas en amarillo, el programa completa el resto y no volverá a crear carpetas si la Columna creada no está vacía.
Gracias Cooper por la respuesta, pero esto no es lo que quiero hacer.
cuando está creando un nombre de carpeta de plantilla, pero solo quiero cambiar una parte de esta línea de mi código. en lugar de esta línea
const carpetanueva = carpetadestino.createFolder(carpetaorigen.getName());
Solo quiero que me guste esto: el nombre de la carpeta de creación es de la celda F4. los nombres restantes de las carpetas pueden permanecer como en la plantilla.
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("nameFile"); var name = ss.getRange("F4").getValue(); const newFolder = destinyFolder.createFolder(sourceFolder.setName(name));pero esta línea cambia el nombre de ale en las subcarpetas i todo el catálogo de estructura cuando se está creando.