Flipando, no lanza email

98 views
Skip to first unread message

ENEKO RODRIGUEZ

unread,
Jan 17, 2022, 5:47:07 AM1/17/22
to Apps Script en Español
Egunon, Buenos días!!!

Primero direis por que pongo Flipando... pues por que hasta hace poco si funcionaba, y sin cambiar nada ha dejado de funcionar... y practicamente el mismo codigo en otra hoja de excel, si funciona.

Intento hacer que cuando el usuario cambia el valor de una columna a "ENVIAR", envie un email recogiendo los datos del excel... He ido comprobando cada paso (mostrando valores en la hoja excel, no se depurar de otra manera) y parece que esta bien hasta el punto justamente de envio del email, y de por si el nevio del email he probado con dos formas que he visto, usando la clase gmailApp y la clase Mail.App... ya no se me ocurre mas... una ayudita? alguien ve algo que que me he perdido?

Ah!!!! y no envia el email y ya no ejecuta lo siguiente a la instruccione del emai, y el error que me da no tiene nada que ver on lo del email... d epor si, me da el error pero si me funciona la instrucción supuestamente del error (TypeError: Cannot read property 'getRow' of undefined at OnEdit (Codigo: 17:2)

Os pongo todo el codigo en un documento de word para mantener los colores.
Muchas gracias
Noenviaemail.docx

Omar Raygoza

unread,
Jan 27, 2022, 6:35:47 PM1/27/22
to Apps Script en Español
Hola. Primero lo primero, error por error, recuerda que GAS es interpretado.
Vamos por partes, creo que tu rango está incorrecto.

Tu código está así:
-------
var hoja = SpreadsheetApp.getActiveSheet()

var celdaModificada= e.range//hoja.getRange("J2");

var NumFila=celdaModificada.getRow()

------

El ejemplo que viene en : https://developers.google.com/apps-script/reference/spreadsheet/range?hl=en#getRow()

te puede dar más información, checa dónde puede estar el error:

------

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var range = sheet.getRange("B2"); ------>>>> Primero apuntas a a hoja sheet y luego a su rango
Logger.log(range.getRow())

----------
En tu caso debería ser algo así como (uso let en vez de var, pero no hay problema)
let rango = hoja.getRange(e.range);
let NumFila = rango.getRow();

Prueba a ver si con eso se resuelve.
Si quieres saber qué viene en  el parametro e.range puedes utilizar 
Logger.log(JSON.stringify(e.range));

Saludos.
Omar Raygoza

ENEKO RODRIGUEZ

unread,
Jan 28, 2022, 6:08:07 AM1/28/22
to Apps Script en Español
Nop, eso me ha fallado mas... pero si he cambiado cosas mirando las clases y probando diferentes cosas...

var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   
var celdaModificada= hoja.getCurrentCell(); // hoja.getRange
var NumFila=celdaModificada.getRow();
Logger.log(JSON.stringify(NumFila))

var columna=celdaModificada.getColumn();
Logger.log(JSON.stringify(columna))

Y en la ejecución veo que, NumFila y columna tienen la información que quiero, en este caso columna tiene un 10, por lo que tiene que enviar un email, pero no envia da el siguiente error:

Captura.JPG

idea?¿? eskerrik asko!!

Omar Raygoza

unread,
Jan 28, 2022, 10:29:58 AM1/28/22
to Apps Script en Español
Hola te sugiero que mejor utilices GmailApp y no MailApp. Hace tiempo hubo una discusión sobre estoy recuerdo que era más eficiente el uso de GmailApp ya que los correos salen asociados a tu cuenta, por lo que en la Bandeja de Enviados puedes ver lo que enviaste.

Prueba y nos avisas cómo va.
Salu2

ENEKO RODRIGUEZ

unread,
Jan 31, 2022, 4:59:16 AM1/31/22
to Apps Script en Español
Eskerrik asko a todos/as!!! SOLUCIONADO

El problema de permiso lo he solucionado cambiando el nombre del procediemiento ONEdit!!! Os pongo el codigo finalizado.
/**
 * @OnlyCurrentDoc
 */

function onEditEneko(e){
 // Trigger, cuando un valoor cambia
  //e es el rango modificado

//quiero:
//   1- enviar un email
//   2- poner fecha de envio
//   3- si se cambia estado, cambiar color de la fila
//   4- si ya se ha enviado un email... avisar si se envia otra vez
var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   
var celdaModificada= hoja.getCurrentCell(); // hoja.getRange
var NumFila=celdaModificada.getRow();
Logger.log(JSON.stringify(NumFila))

var columna=celdaModificada.getColumn();
Logger.log(JSON.stringify(columna))

//hoja.getRange(40,4).setValue(columna) , no entiendo, dice que error en getcolumn, pero con este codigo se ve que lo coge bien
  //depuracion
  //    hoja.getRange(43,11).setValue("Getcolumn")
  //    hoja.getRange(43,12).setValue(columna)

if (columna==10){  //Columna 1º0, columna J, se esta cambiando el enviar o no
  
    var dato= celdaModificada.getValue();
    
    if (dato == 'ENVIAR'){
    
      //pregyntamos si estamos seguros para enviar el mensaje
      ConfirmarSiEnviar(e,NumFila)
    }    
}
else if (columna==13){ //La columna del estado Columna 13, columna M  
  EstadoModificado(e)
}

} //Funcion OnEdit

function EnviarEmail(e,ParaQuien,NumFila) {
  
  //dependiendo de si es para Familias (0),  para Eneko (1) o para Txesmika(2)

  var hoja = SpreadsheetApp.getActiveSheet();  
  
  //Cuando enviamos el email, ponemos la fecha en la columna FechaEnvio
  
    //Recupero el numero de fila
    var celdaActiva=e.range;
    //var NumFila=celdaActiva.getRow()

    //Recupero el texto para el email, tambien, que cambia algo segun sea el destinatario        
    // Recupero el email de la persona
    var AvisoFinal=""

    //depuracion
    hoja.getRange(41,8).setValue(ParaQuien)

    if (ParaQuien==0) {
      dato= hoja.getRange(NumFila,2).getValue()
      BodyHtml="<body><h3>Egunon!!</h3>";
      AvisoFinal="eMail enviado a la familia"
    }
    else if (ParaQuien==1) {
        dato="erodr...@colegioirlandesas.com"
        BodyHtml="<body><h3>Egunon ENEKO!!</h3>";
        AvisoFinal="eMail enviado a Eneko"
    }
    else {
        dato="pa...@txesmika.com"
        BodyHtml="<body><h3>Egunon PAULA!!</h3>";
        AvisoFinal="eMail enviado a Paula-Txesmika"
    }
   
    var email=dato;
        
    //Recupero el asunto para el email
    //dato= "IncidenciaIrl " + hoja.getRange(NumFila,1).getValue() ;
    var FechaIncidencia=hoja.getRange(NumFila,1).getDisplayValue()
    dato= "IncidenciaIrl " +  FechaIncidencia
    var asunto=dato
     
    //Sigo con el cuerpo   
    BodyHtml=BodyHtml + "<table class='default'> <tr>"
    BodyHtml=BodyHtml + "<td><strong>    Fecha Incidencia </strong></td> <td>" + hoja.getRange(NumFila,1).getDisplayValue() + "</td></tr>";
    BodyHtml=BodyHtml+ "<tr><td><strong>    Título Incidencia </strong></td> <td>" + hoja.getRange(NumFila,3).getValue() + "</td></tr>";
    BodyHtml=BodyHtml+ "<tr><td><strong>    Alumno/Alumna</strong></td> <td>" + hoja.getRange(NumFila,6).getValue() + "</td></tr>";
    BodyHtml=BodyHtml+ "<tr><td><strong>    Incidencia</strong></td> <td>" + hoja.getRange(NumFila,8).getValue() + "</td></tr>";
     if (ParaQuien==1) {
       BodyHtml=BodyHtml + "<tr><td><strong>    Email Familia</strong></td> <td>" + hoja.getRange(NumFila,2).getDisplayValue() + "</td></tr>";
       BodyHtml=BodyHtml + "<tr><td><strong>    Observaciones Internas </strong></td> <td>" + hoja.getRange(NumFila,12).getValue() + "</td></tr>";
    }
    BodyHtml=BodyHtml + "<tr><td><strong>  Comentario Técnicos </strong></td> <td><i>" + hoja.getRange(NumFila,9).getValue() + "</i></td></tr> </table>";
    BodyHtml=BodyHtml + "<br><br> Un Saludo. </body>"

  ///////////////////////////////// HASTA AQUI PARECE QUE TODO BIEN //////////////////////////////
    GmailApp.sendEmail (email,asunto,'',{htmlBody: BodyHtml});
    //MailApp.sendEmail ({
    //  to: email,
    //  subject: asunto,
    //  htmlBody: BodyHtml 
    //})

    //Modifico la fecha de envio
    var FechaEnvio= new Date()
    var Year    = FechaEnvio.getFullYear();
    var Mes   = FechaEnvio.getMonth() + 1;
    var Day     = FechaEnvio.getUTCDate();
    var strFechaEnvio = Day + "-" + Mes + "-" + Year;

    /////////////////////////////////  aqui parece que fallña ///////////////////
    hoja.getRange(40,10).setValue(FechaEnvio)
    hoja.getRange(41,10).setValue(Year)
    hoja.getRange(42,10).setValue(Mes)
    hoja.getRange(43,10).setValue(Day)
    hoja.getRange(NumFila,11).setValue(strFechaEnvio)

    //Aviso de que se ha enviado el email.
    SpreadsheetApp.getUi().alert("Verificación",AvisoFinal,SpreadsheetApp.getUi().ButtonSet.OK)

    
  }

  function EstadoModificado(e){
    var hoja = SpreadsheetApp.getActiveSheet();
    var sheet=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

    var celdaModificada= e.range
      
    var dato= celdaModificada.getValue();
    
    //Recupero el numero de fila
    var celdaActiva=e.range;
    var NumFila=celdaActiva.getRow()

    //Calculamos la fecha de hoy
    var FechaHoy= new Date()
    var year    = FechaHoy.getFullYear();
    var month   = FechaHoy.getMonth() + 1;
    var day     = FechaHoy.getUTCDate();
    var  strFechaHoy= day + "-" + month + "-" + year ;
    
    if (dato=="Finalizado"){
      //Cambiamos el color a la fila
      //hoja.getrange(NumFila,1,1,15).setBackgroundRGB(15,177,56) //desde la columna 1, 15 columnas
      var RangioFila=sheet.getRange(NumFila,1,1,15);
      RangioFila.setBackgroundRGB(15,177,56);

      //Cambiamos la fechGFin
      hoja.getRange(NumFila,15).setValue(strFechaHoy)

      //Oculto la fila.
      sheet.hideRows(NumFila);

    }
    else if ((dato=='Espera Txesmika') || (dato=='Espera Familias'))  {
      //Cambiamos el color a la fila
      //hoja.getrange(NumFila,1,1,15).setBackgroundRGB(15,177,56) //desde la columna 1, 15 columnas
      var RangioFila=sheet.getRange(NumFila,1,1,15);

      //Cambiamos la fecha de espera
      hoja.getRange(NumFila,14).setValue(strFechaHoy)

      //segun que valor tenga dato ponemos un colo u otro y enviamos eMail
      if (dato=='Espera Txesmika'){
        RangioFila.setBackgroundRGB(74,134,232);
        EnviarEmail(e,2,NumFila)
      }
      else{
        RangioFila.setBackgroundRGB(142,124,195);
        ConfirmarSiEnviar(e,NumFila)
      }
         

    }
    else if (dato=='Eneko'){
      //Cambiamos el color a la fila
      //hoja.getrange(NumFila,1,1,15).setBackgroundRGB(15,177,56) //desde la columna 1, 15 columnas
      var RangioFila=sheet.getRange(NumFila,1,1,15);
    
      RangioFila.setBackgroundRGB(255,0,126);
           
      //Cambiamos la fecha de espera
      hoja.getRange(NumFila,14).setValue(strFechaHoy)

      EnviarEmail(e,1,NumFila)
    }
    
  }  //Funcion EstadoModificado

  function ConfirmarSiEnviar(e,NumFila) {
      var hoja = SpreadsheetApp.getActiveSheet();
      
      //pregyntamos si estamos seguros para enviar el mensaje
      var ui=SpreadsheetApp.getUi();
      var respuesta=ui.alert("Confirmacion","Estas seguro de enviar el mensaje a la familia?",ui.ButtonSet.YES_NO) //si ponemos prompt en lugar de alert, el  usuario puede introducir texto
      if (respuesta ==ui.Button.YES){
        
        EnviarEmail(e,0,NumFila)
        var celdaActiva=e.range;
        //var NumFila=celdaActiva.getRow()

        //Cambiamos el valor de estado Email a enviado
        hoja.getRange(NumFila,10).setValue("Enviado")
        } 

  }

  function AlumnadoNoPuede(e){
    var hoja=SpreadsheetApp.getActive();
         
    var dato= emailIntroducido.getRange(emailIntroducido.getRow, 16);

    if (dato=="#¡VALOR!"){
      hoja.getRange(30,2).setValue("NO ES UN ALUMNO")
    }

    //EnviarEmail(e,1)


  }

Omar Raygoza

unread,
Jan 31, 2022, 5:40:09 PM1/31/22
to Apps Script en Español
Hola ENEKO.
Entonces ahora cuál es el error? Comparte alguns capturas de pantalla o los registros del LOG para ver qué sucede.

ENEKO RODRIGUEZ

unread,
Feb 1, 2022, 5:17:37 AM2/1/22
to Apps Script en Español
Aupa Omar!!!

Ya esta solucionado, en el mensaje anterior he puesto el código como ha acabado.

Eskerrik asko!!!

Omar Raygoza

unread,
Feb 1, 2022, 8:23:51 PM2/1/22
to Apps Script en Español
Felicidades y gracias por compartir tu código, será de mucha utilidad.
De pasada, les comparto que estoy haciendo un Google Site con codigos de ejemplo funcionales
Si alquien desea colaborar poniendo sus códigos, les puedo dar acceso de edición al site.
Saludos.

Reply all
Reply to author
Forward
0 new messages