Mostrando entradas con la etiqueta imágenes. Mostrar todas las entradas
Mostrando entradas con la etiqueta imágenes. Mostrar todas las entradas

jueves, 31 de marzo de 2022

Insertar imágenes desde Drive en un correo (por ejemplo)

 Para insertar imágenes en nuestro correo necesitamos utilizar las opción de correo htmlBody

Por ejemplo:


var mensaje = ' Mi mensaje'
var opciones = {htmlBody: mensaje}

MailApp.sendEmail(correo_cargo, 'Nuevo mensaje', mensaje,opciones)





Antes de estas líneas metemos en el mensaje, mediante lenguaje html la imagen que

queremos que aparezca en el correo
var mensaje = ' Mi mensaje'

var imagen = <img src= > // ahí añadimos la url de la imagen.

mensaje = mensaje + imagen


PERO, CON IMÁGENES DRIVE NO FUNCIONA.

Necesitamos crear una url especial, tal que así:

http://drive.google.com/uc?export=view&id=


Nos falta el id de la imagen, que lo sacaremos del enlace público de compartir la imagen.

En dicho enlace público tenemos el id necesario entre /file/d/ y / view?

Una vez conseguido el Id lo metemos en una variable:

var id_conseguido = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'


Y con este dato y la url anterior creamos la imagen en html

var imagen = '<img src=http://drive.google.com/uc?export=view&id='+idconseguido+'>'

peeeero, aún no va a funcionar, ya que necesitamos desmarcar una opción dentro del menú de

compartir donde hemos conseguido la url pública
:

Haz clic en la rueda de
configuración
Quita la marca
a aplicar actualización de seguridad



Una vez hecho esto, la imagen debería aparecer sin problemas en el correo.


Un ejemplo del trozo de código necesario sería este:

var miid = '0B_iUREgZco_VaWpseFlnNFQzZGFrR1VxRXlRWkg4YWVKN2pj' 
// Se consigue del enlace público a compartir entre file/d/ y /view?
// Hay que darle a configuración y quitar la marca de seguridad
var imagen = '<img src=http://drive.google.com/uc?export=view&id='+miid+'>'
mensaje = mensaje + '<br>'+imagen
var opciones = {htmlBody: mensaje}

MailApp.sendEmail(correo_cargo, 'Nuevo mensaje', mensaje,opciones)

jueves, 17 de diciembre de 2020

Insertar logo en pestaña (código y proceso extraño)

Estoy haciendo una aplicación para crear actas y necesito que en la pestaña de cada acta aparezca como encabezado el logo del centro.

Quiero, además, que la imagen del logo esté en drive.

Como cada pestaña con cada acta se crea por código, no me vale el menú insertar-imagen-en celda, ya que, que yo sepa, no hay forma de hacerlo desde código.

Pero si puedo utilizar la función "image(url;[]) 

Pero la url que nos da drive de una imagen, utilizando "conseguir enlace" no funciona con esta función. 

Me funciona, sin embargo, la combinación de https://drive.google.com/uc?export=view&id= con el id de cada imagen.

Para hacerle la vida más fácil al usuario, le pido la url de "conseguir enlace" y mediante este trozo de código la convierto al tipo de enlace que he descrito en el anterior párrafo:

  

  var herramienta = SpreadsheetApp.getActiveSpreadsheet()

  var imagen_url = herramienta.getRangeByName('imagen').getValue()
  var imagen_primera_parte = "https://drive.google.com/uc?export=view&id="       
  var imagen_id =  imagen_url.match(/[-\w]{25,}/)
  var imagen = imagen_primera_parte+imagen_id

pestana.getRange('A1').setValue('=image("'+imagen+'";1)')

 

El código funciona perfectamente: desde la url extrae el id de la imagen y después la añade al enlace especial. Con la última fila del código, insertamos la imagen en la celda A1 con la función image.


Pero, me he encontrado con la SORPRESA que hay veces que la imagen aparece y otras que no.

Después de investigar y probar diferentes situaciones, me he encontrado con que aparece siempre la imagen si utilizamos un proceso muy particular.

 El proceso funciona así:

  1. Debemos subir la imagen desde el ordenador
  2. Debemos darle permiso público a la imagen(cualquiera con el enlace)

Sorprendentemente, no me ha funcionado con imágenes que ya estaban de antemano en mi Drive y, por supuesto, ninguna imagen que no tenga dado el permiso público de antemano.

domingo, 24 de junio de 2018

Como meter una imagen (una firma) desde un formulario a un documento

Con esta función, un formulario y una plantilla podemos hacer que los usuarios suban su firma (imagen) y se inserte en el lugar de un documento que decidamos. El código lo he metido en la hoja de cálculo unida al formulario y he activado el evento "al enviar el formulario"

(Hay unas cuantas partes interesantes en sí mismas:

  • Como conseguir datos del formulario
  • Como conseguir el ID de un archivo desde su URL
  • Como hacer público un archivo
  • Como crear una copia de una plantilla y meterla en una carpeta concreta )


function insertar_imagen(e) {
// Pillamos la imagen subida desde el formulario (Conseguimos por defecto la URL de dicha imagen)
var imagen= e.values[2]
// Utilizamos esta fórmula para extrar de la URL el ID
var id = imagen.match(/[-\w]{25,}/)
// Con el ID abrimos el archivo de imagen subido
var irudia = DriveApp.getFileById(id)
// Le damos permiso para que sea accesible por cualquiera (Parece que sino no funciona el código)
irudia.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW)

// Conseguimos un ID de una carpeta para meter el nuevo documento
   var folderID='1ROGPRhAgtozzpcQr0jM_ekwBiuFsaw5E' //Este ID debería ir fuera del código
   var folder = DriveApp.getFolderById(folderID)
  // Creamos una copia de la plantilla y abrimos el documento
  var nuevoID= DriveApp.getFileById('1hIjlBCktJdIy8GuDB72XPW-H3_Uw_WhygnbyYLq0sbA').makeCopy('Firmado',folder).getId()
  var doc = DocumentApp.openById(nuevoID)


  // Conseguimos todas las partes del documento, mayormente los párrafos
  var todos = doc.getBody().getNumChildren()
  // Creamos una variable que apunte al cuerpo del documento, no a todo el en su conjunto
  var body = doc.getBody()
// Creamos un array para ir metiendo el texto de cada párrafo, con intención de buscar la marca que hemos elegido ### y sustituirla por la firma
  var el=[]

  // Recorremos todos los elementos del documento
 for (var j=0; j<todos; j++){
 // Metemos por cada vuelta el elemento en una variable
 var elemento = doc.getChild(j)
 // Apuntamos que tipo de documento es en otra variable
 var tipo = elemento.getType()
//Utilizamos condicional para solamente quedarnos con los párrafos
 if (tipo=='PARAGRAPH'){
 // Si es párrafo, conseguimos el texto interno
 el[j]= elemento.getText()
// Buscamos en el texto la marca mediante un condicional
   if (el[j]=='###'){
// Borramos dicho texto cuando lo encontramos
   elemento.removeFromParent()
 // Y lo sustituimos por la imagen de la firma
      body.insertImage(j, irudia)
   }
 }
 }
}

Crear PDF horizontal

El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...