2012-08-11 54 views
7

Tengo una secuencia de comandos de aplicaciones que crea múltiples archivos y los mueve a una carpeta. ¿Hay una manera de colocar el un archivo directamente en una carpeta o debo primero tendrá que obtener el archivo y luego copiarlo a la carpeta correspondiente y luego de sacarlo de la carpeta raíz de esta manera:Google Apps Script: ¿Cómo creo un archivo en una carpeta?

folder=DocsList.createFolder("MyFolder"); 
var file=DocsList.createFile(blob); 
file.addToFolder(folder); 
file.removeFromFolder(DocsList.getRootFolder()); 

El problema con esto es que si abre Drive verá que el archivo se colocó primero en la carpeta raíz y luego se movió a Mi Carpeta. Entonces hay un poco de retraso hasta la ejecución de removeFromFolder.

Respuesta

10

acabo de probar el siguiente código

function Test() { 
    DocsList.createFolder('Folder1').createFolder('Subfolder1').createFile('File1', 'Empty'); 
} 

Funciona como se esperaba, es decir, crea un nuevo documento File1 en la carpeta recién creada My Drive\Folder1\Subfolder1.

+0

pregunta relacionada @ megabyte1024 , si la carpeta ya existe ¿puedo reemplazar .createFolder (name) por .getFolderById (id)? ¿Lo intentaste? –

+0

Simplemente lo hice. Todo funciona. 'function Test2() { var id = DocsList.createFolder ('Folder2'). getId(); DocsList.getFolderById (id) .createFile ('Archivo2', 'Vacío'); } ' – megabyte1024

4

Solo quería comentar (pero no tengo los 50 puntos de reputación).

El motivo por el que la respuesta anterior funciona cuando la publicación original no lo hizo es que .createFolder se aplica tanto a DocsList.createFolder (que crea la carpeta en el directorio raíz) como a Folder.createFolder que crea una subcarpeta en el carpeta actual.

Puede ser obvio para todos menos para mí - pero me tomó un buen tiempo para darse cuenta :-)

+1

Puede que lo consideres una respuesta real, completa e independiente en lugar de un comentario. – bummi

5

A partir de 2015, se debe utilizar el servicio DriveApp para administrar archivos en Google Drive. DriveApp tiene una clase de carpeta que le permite crear un archivo directamente en una carpeta.

function createFilesInFolder() { 
    //This creates the folder 
    var folder = DriveApp.createFolder('My Folder'); 
    //This creates a file in the folder 
    var file = folder.createFile('My File.txt', 
           'Lorem ipsum', 
           MimeType.PLAIN_TEXT); 
} 
7

El DocsList ya no funciona y ha sido sustituido por el DriveAPI, Servicios App de Google y servicios avanzados de Google.

Aquí dejo mi código de prueba, este código crea carpetas - subcarpetas - Google archivos - pdf - y los almacena en carpetas y subcarpetas de diversas maneras, y espero que sea útil

function Drive_2015() { //busca un folder, si no lo hay lo crea y crea 2 sub carpetas un google document copiado en cada una de ellas 
    var name='folder de prueba'; 
    var carpeta = DriveApp.getRootFolder().searchFolders("title contains '"+name+"'"); 
    if (carpeta.hasNext()===true) {  
     while (carpeta.hasNext()) { 
     var folder = carpeta.next(); 
     Logger.log(folder.getName()+' '+folder.getId()); 
     } 
    }else{ 
    var folder=DriveApp.getRootFolder().createFolder(name); 

    var parent=DriveApp.getFolderById(folder.getId()); // get parent folder 
    var folder2 =parent.createFolder('Subfolder'); // 1° way to create sub folder 
    var folder3=folder.createFolder(name+1);// 2° way to create sub folder (and more easy) 

    var doc = DocumentApp.create('Documento sta'); 
    var sheet = SpreadsheetApp.create('Spreadsheet sta'); 
    Utilities.sleep(300); // este retardo es para garantizar en el user-side la creacion del nuevo archivo 
    var files = DriveApp.getFilesByName('Documento sta');// or Id var file = DriveApp.getFileById(doc.getId()); 
    while (files.hasNext()) { 
     var file = files.next(); 
     Logger.log('ojo '+file.getName()); 
     file.makeCopy(folder3); 
     file.makeCopy(folder2); 
     var file2=file.makeCopy(folder); 
     file2.setName('Acta individual del alumno') 
     var blob = file2.getAs('application/pdf'); 
     var file2pdf = folder.createFile(blob); 
     var file2pdf = DriveApp.getFileById(file2pdf.getId()); 
     var file2pdf=file2pdf.makeCopy(folder); 
     Logger.log('se creó: '+file.getName()+' en la carpeta: '+folder.getName()+' el PDF es: '+file2pdf.getId()); 
     DriveApp.getFileById(file2pdf.getId()).setTrashed(true) 
     DriveApp.getFileById(docid).setTrashed(true) 
     } 
    } 
} 
Cuestiones relacionadas