Con ayuda de GAS (Google Apps Script), veremos un método para visualizar las imagenes subidas desde AppSheet, en la hoja de cálculo.

Para ello utilizaremos un rutina en GAS (Google Apps Script) en combinación con VLOOKUP.

La hoja de ejemplo es la Hoja «ANIMALES». Luego, añadir otra hoja denominada ENLACES.

En cuanto a la hoja ENLACES, la misma consta de 4 columnas:

A- ANALISIS DE LA FORMULA UTILIZADA

En la celda D2, de la hoja ANIMALES insertar la fórmula siguiente:

=IMAGE( CONCATENATE( «http://drive.google.com/uc?id=»; mid(VLOOKUP(index(split(C2;»/»);0;2);ENLACES!$B$1:$D$1000;2;FALSE);33;33) );2 )

Vamos por partes:

1- split(C2;»/») : divide el contenido de la celda C2 (que contiene la ruta que AppSheet asigna a las imagenes) por el separador «/». Ejemplo: split(ANIMALES_Images/1343f78a.IMAGEN.131921.jpg). Resultado: [«ANIMALES_Images», «1343f78a.IMAGEN.131921.jpg»]

2- index(split(C2;»/»);0;2) : selecciona, el segundo elemento de la division realizada con split. Siguiendo el ejemplo del punto 1 seria: 1343f78a.IMAGEN.131921.jpg

3- VLOOKUP(index(split(C2;»/»);0;2);ENLACES!$B$1:$D$1000;2;FALSE) : lo que hace es buscar el texto determinado en el punto 2, en la hoja ENLACES, en el rango $B$1:$D$1000 , y traer la 2da columna a partir de la columna de busqueda. En este caso, traerá el valor correspondiente de la columna LINK de la hoja ENLACES. Siguiendo el ejemplo en cuestion, el valor que traerá será:

https://drive.google.com/file/d/1k2CO-7KuKuHm7r7_aQpHSfwyHhpDF6hU/view?usp=drivesdk1343f78a.IMAGEN.131921.jpg

4- mid(VLOOKUP(index(split(C2;»/»);0;2);ENLACES!$B$1:$D$1000;2;FALSE);33;33) : lo que hacemos aqui es obtener el id de la imagen del enlace. La formula extrae 33 caracteres de la cadena resultante del punto 3, y contados desde la posicion 33!

En este caso, siguiendo el ejemplo, el resultado sería: 1k2CO-7KuKuHm7r7_aQpHSfwyHhpDF6hU

5- CONCATENATE( «http://drive.google.com/uc?id=»; mid(VLOOKUP(index(split(C2;»/»);0;2);ENLACES!$B$1:$D$1000;2;FALSE);33;33) ) : ya en la parte final, concatenamos la cadena «http://drive.google.com/uc?id=» con el id obtenido en el paso 4.

6 – Por último, la expresión completa:

IMAGE( CONCATENATE( «http://drive.google.com/uc?id=»; mid(VLOOKUP(index(split(C2;»/»);0;2);ENLACES!$B$1:$D$1000;2;FALSE);33;33) );2 ) NLACES!$B$1:$D$1000;2;FALSE);33;33) );2 ) : con IMAGE y el parametro 2 lo que hacemos es crear la imagen ajustada a la celda, a partir de la cadena resultante en el paso 5.

B- ANALISIS BREVE DEL SCRIPT

La rutina javascript permite en este caso lo siguiente:

Dado algún cambio en cualquier hoja de la planilla de trabajo, registrar en la hoja ENLACES, los valores de las columnas NOMBRE, ARCHIVO, LINK y TIPO de todos los archivos subidos a la carpeta de trabajo. En este caso, al subir una imagen como registro en la hoja ANIMALES, la carpeta de trabajo es ANIMALES_Images. Ojo con esa nomenclatura.

La parte de la rutina que hace que actue automaticamente ante algun cambio es:

function setUpTrigger() {
ScriptApp.newTrigger('enlace')
.forSpreadsheet('ID_DE_LA_HOJA_DE_CALCULO')
.onChange()
.create();
 }

En ese apartado, introducir el ID de la hoja de trabajo en cuestion.

Luego, la parte del código que asigna los valores mencionados a la columna es -funcion enlace()-:

function enlace() {

  // seleccionar la hoja de cálculo actual
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('NOMBRE_DE_LA_HOJA_QUE_TENDRA_LOS_ENLACES');

  // obtener la ultima fila y columna
  var lastCol = sheet.getLastColumn();
  var lastRow = sheet.getLastRow();

  //limpiar contenido
  sheet.getRange(2, 1, lastRow, lastCol).clearContent();

// identificacion de la carpeta de trabajo
  
  var fldr=DriveApp.getFolderById("ID_DE_LA_CARPETA_DONDE_APPSHEET_ALMACENA_IMAGENES");

  var files=fldr.getFiles();

      // crear variable para usar como contador para verificar el número de archivo
    var fileCounter = 0;

    // cree una matriz vacía para insertar datos de archivo para agregar a la hoja al final
    var fileData = [];

    // recorrer cada archivo devuelto *************************
    while (files.hasNext()) {

      // obtener el archivo
      var file = files.next();

      // obtener el nombre del archivo
      var fileName = file.getName();


      // quitar extension

      var fileSimple= (fileName.split("."))[0];  
 
      // obtener el ID del archivo
     // var fileID = file.getId();

      // obtner la url del archivo
      var fileUrl = file.getUrl();
      // crear cadena de la url del archivo
     // var hyperlink = '=HYPERLINK("' + fileUrl + '","' + fileName + '")';
      var hyperlink = fileUrl + fileName;

      // obeter el tipo de archivo
      var fileType = file.getMimeType();

      // recopilar datos de fila y añadirlos a la matriz, para luego agregarlos a la hoja
     // var rowData = [fileName, fileID, hyperlink, fileType];
      var rowData = [fileSimple, fileName, hyperlink, fileType];

      fileData.push(rowData);

      // incrementar el contador de archivos en 1
      fileCounter++;


    }

    // obtener la ultima fila libre + 1 (despues del encabezado) 
    var lastRow = sheet.getLastRow() + 1;
    // obtener el largo del array 
    var arrayLength = fileData.length;
    // obtener el ancho de los registros del array (cantidad de columnas)
    var arrayWidth = fileData[0].length;
    sheet.getRange(lastRow, 1, arrayLength, arrayWidth).setValues(fileData);

    
}


Observar que dentro de la funcion enlace() hay dos variables a modificar:

a- el nombre de la hoja donde obtendremos los enlaces de los archivos subidos. En el caso del ejemplo se llamaba «ENLACES». He indicado como: ‘NOMBRE_DE_LA_HOJA_QUE_TENDRA_LOS_ENLACES’

b- el ID de la carpeta de trabajo. He indicado como: » ID_DE_LA_CARPETA_DONDE_APPSHEET_ALMACENA_IMAGENES «

Es aparentemente largo, viendo desde este punto de vista. Les recomiendo -y luego lo dominarán- mirar de nuevo el video siguiente 😉

Por admin

×

Hello!

Click one of our contacts below to chat on WhatsApp

× Escribinos en el Whatsapp!