2012-08-11 30 views
7

Ho uno script di app che crea più file e li sposta in una cartella. C'è un modo per posizionare il file direttamente in una cartella o devo prima avere per ottenere il file quindi copiarlo nella cartella appropriata e poi rimuoverlo dalla cartella principale in questo modo:Script di Google Apps: come posso creare un file in una cartella?

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

Il problema con questo è che se apri Drive, vedi il file che viene prima messo nella cartella principale e poi spostato in MyFolder. Quindi c'è un po 'di ritardo fino all'esecuzione di removeFromFolder.

risposta

10

appena testato il seguente codice

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

Esso funziona come previsto, cioè creato un nuovo File1 documento cartella appena creata My Drive\Folder1\Subfolder1.

+0

domanda relativa @ megabyte1024 , se la cartella esiste già posso sostituire .createFolder (nome) per .getFolderById (id)? ci hai provato? –

+0

L'ho appena fatto. Tutto funziona. 'function Test2() { var id = DocsList.createFolder ('Folder2'). getId(); DocsList.getFolderById (id) .createFile ('File2', 'Empty'); } ' – megabyte1024

4

Volevo solo commentare (ma non ho i 50 punti reputazione).

La ragione per la risposta di cui sopra funziona quando il post originale non è che .createFolder vale sia per DocsList.createFolder (che crea la cartella nella directory principale) e Folder.createFolder che crea una sottocartella nella cartella corrente.

Può essere evidente a tutti tranne me - ma mi c'è voluto un bel po 'a capire :-)

+1

Si potrebbe considerare di renderlo una risposta reale, completa, autonoma invece di un commento. – bummi

5

A partire dal 2015, si dovrebbe utilizzare il servizio DriveApp per gestire i file in Google Drive. DriveApp ha una classe Folder che consente di creare un file direttamente in una cartella.

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

DocsList non funziona più ed è stato sostituito da DriveAPI, Google App Services e Advanced Google services.

Qui lascio il mio codice di prova, questo codice crea le cartelle - sottocartelle - google file - PDF - e li memorizza in cartelle e sottocartelle in vari modi, e spero che sarà utile

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) 
     } 
    } 
} 
Problemi correlati