Copiar rangos de datos entre planillas de Google Spreadsheets

Una de las funciones que suelen atraer a muchos a utilizar planillas en la nube es IMPORTRANGE que nos permite importar un rango de celdas desde otra planilla. Cuando la fuente remota se actualiza la planilla que usa IMPORTRANGE «ve los cambios» e importa el rango actualizado.

Es análogo a los orígenes de datos de Excel pero solo que en la nube.

Las dos limitaciones que suelen aparecer usando IMPORTRANGE se dan cuando:

  1. Se quieren importar rangos demasiado grandes y se alcanza el limite de la función IMPORTRANGE.
  2. El origen de datos va cambiando muy seguido y nuestra planilla no termina nunca de cambiar…

Cuando suceden estos problemas es probable que sea conveniente utilizar un script para copiar los datos entre planillas, podemos crear un menu para iniciar la ejecución a demanda.

Al usar Apps script para copiar entre planillas tenemos la capacidad de copiar rangos practicamente ilimitados con mejor performance que usando la formula IMPORTRANGE. Definamos una planilla de origen por su link y las columnas a copiar:


// Link a planilla desde la cual vamos a copiar hacia la planilla actual
var linkPlanillaOrigenDatos = ‘https://…’;


// Columnas a copiar desde la hoja de origen, para poder cambiar el orden, indice inicia en 1
var arrColsOrigen = [3, 1, 20, 6];

// Cada hoja de la planilla de origen

for (i in sheets){
  var sheetName = sheets[i].getSheetName().substring(0,15);

  // Si en origen estamos en la hoja que queremos copiar
  if (sheetName == hojaBDOrigen) {
    SpreadsheetApp.getActiveSpreadsheet().toast(‘Copiando datos ‘+hojaBDDestino+’…’, ‘Estado’);
    var sourcesheet = sourceSS.getSheetByName(sheetName);


    // Cada columna a importar
    for (var iCol in arrColsOrigen) {
      // Leemos
      var sourcerange = sourcesheet.getRange(2,arrColsOrigen[iCol],sourcesheet.getLastRow()-1,1);
      var sourcevalues = sourcerange.getValues();
      // Escribimos
      var destrange = destsheet.getRange(iniRow,colPos,sourcevalues.length,1);
  destrange.setValues(sourcevalues);
      colPos++;
    }

….

Este script lo ejecutamos adjunto a una planilla. Lo primero es obtener el enlace completo de la planilla desde la cual vamos a copiar los datos. Luego indicamos las columnas a copiar. Cuando accedemos a la planilla de origen debemos recorrer las hojas e identificar la hoja que es fuente de informacion. Una vez que estamos en la hoja de origen copiar las columnas en el orden que necesitamos a la planilla actual.

Para ver el código completo en Github:

Demo3 – Copiar rangos entre planillas
https://github.com/nrodriguezm/app-scripts-demo/blob/master/demo3-copiar-rangos-planillas/Code.js




twitterpinterest