Con todo el tema del coronavirus se me ocurrió montar un script para facilitar la vida a los profesores que creo que puede ayudar a mucha más gente. Se basa en un script que permite copiar los contenidos de una carpeta (con jerarquía de carpetas y ficheros internos ) en una lista de carpetas (en mi caso, la lista de carpetas de los alumnos).
Esto permite copiar todo un conjunto de ficheros y carpetas a muchas carpetas diferentes. Os puedo asegurar que quita una gran cantidad de trabajo y que se puede usar en muchas situaciones.
Aquí tenéis el código:
function Copiar()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var tocopy = DriveApp.getFolderById(sheet.getRange("B1").getValue().split("folders/")[1]);
var parentfolder = DriveApp.getFolderById(sheet.getRange("B2").getValue().split("folders/")[1]);
//Preparamos lista de ficheros a copiar
var folders = tocopy.getFolders();
var ToCopyArray = new Array();
while ( folders.hasNext() )
{
var folder = folders.next();
var files = folder.getFiles();
while( files.hasNext() )
{
var obj = new Object();
obj.folder_name = folder.getName();
obj.file = files.next();
ToCopyArray.push(obj);
}
}
//Copiamos los ficheros
var alumnos = parentfolder.getFolders();
while(alumnos.hasNext())
{
var folder = alumnos.next();
for(var i = 0 ; i < ToCopyArray.length ; ++i)
{
var name = ToCopyArray[i].folder_name;
var existfolder = folder.getFoldersByName(name);
var folder_to_be_copied = null;
if( !existfolder.hasNext() )
{
folder_to_be_copied = folder.createFolder(name);
}
else
{
folder_to_be_copied = existfolder.next();
}
var file_name = ToCopyArray[i].file.getName();
var files = folder_to_be_copied.getFilesByName(file_name);
if ( !files.hasNext() )
{
ToCopyArray[i].file.makeCopy(file_name, folder_to_be_copied);
}
}
}
}
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var tocopy = DriveApp.getFolderById(sheet.getRange("B1").getValue().split("folders/")[1]);
var parentfolder = DriveApp.getFolderById(sheet.getRange("B2").getValue().split("folders/")[1]);
//Preparamos lista de ficheros a copiar
var folders = tocopy.getFolders();
var ToCopyArray = new Array();
while ( folders.hasNext() )
{
var folder = folders.next();
var files = folder.getFiles();
while( files.hasNext() )
{
var obj = new Object();
obj.folder_name = folder.getName();
obj.file = files.next();
ToCopyArray.push(obj);
}
}
//Copiamos los ficheros
var alumnos = parentfolder.getFolders();
while(alumnos.hasNext())
{
var folder = alumnos.next();
for(var i = 0 ; i < ToCopyArray.length ; ++i)
{
var name = ToCopyArray[i].folder_name;
var existfolder = folder.getFoldersByName(name);
var folder_to_be_copied = null;
if( !existfolder.hasNext() )
{
folder_to_be_copied = folder.createFolder(name);
}
else
{
folder_to_be_copied = existfolder.next();
}
var file_name = ToCopyArray[i].file.getName();
var files = folder_to_be_copied.getFilesByName(file_name);
if ( !files.hasNext() )
{
ToCopyArray[i].file.makeCopy(file_name, folder_to_be_copied);
}
}
}
}
Aquí tenéis el link del documento para poder hacer las pruebas: script
Veréis que le he puesto un botón para ejecutar la función como expliqué en su momento
Cualquier duda que tengáis no vaciléis en hacermela llegar.
Nos vemos
Me funcionó excelente muchas gracias!!! solo un detallito, si quisiera que fuera en varias carpetas, si le cambio el destino por ejemplo links de casillas 'b2:b4', solo copia los documentos en b2, como se podría generar lo otro?
ResponderEliminarMuy bueno pero mira que no me copia todas las carpetas que será?
ResponderEliminar