es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Google Apps Script, El tipo de elemento “meta” debe ser terminado por la etiqueta de cierre correspondiente “”.

Mi objetivo es crear un programa que capturará las tablas recibidas por medio de Gmail y las agregará a una hoja de Google existente.

La primera parte del proyecto consiste en capturar las tablas de Gmail; por lo tanto, he escrito el siguiente código:

function getEmail (){
 var labels = GmailApp.getUserLabelByName('test');
 var threads = labels.getThreads();
 for(var x=0;x<threads.length;x++){ var="" msg="threads[x].getMessages();" for(var="" i=""></threads.length;x++){><msg.length;i++){ var="" subject="msg[i].getBody();" var="" date="msg[i].getDate();" var="" xml="subject" +=""></msg.length;i++){>" ;
     // var xml = "<root>" + subject + "</root>" ;
     var doc = XmlService.parse(subject);
     var content = doc.getAllContent();
     Logger.log(date)
     Logger.log(content)
   }
 }
}

El error que estoy obteniendo es el siguiente:

Excepción: Error en la línea 32: El tipo de elemento "meta" debe terminar con la etiqueta de cierre coincidente "".
getEmail @ Code.gs:11

He rastreado la solución a dos posibles opciones: agregar una etiqueta de cierre “” o agregar “/” a la etiqueta de encabezado. ¿Cómo puedo lograr cualquiera de estas opciones?

Esta es la etiqueta de meta HTML actual en todos los mensajes devueltos:

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta content="en">

Actualización:
Intenté usar una biblioteca GOS para analizar HTML, pero obtengo el mismo error.

Necesito orientación sobre cómo encontrar las etiquetas de meta y modificarlas.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para analizar tablas HTML desde Gmail y escribir en Google Sheet

    Para obtener las tablas de Gmail y agregarlas a una hoja de cálculo de Google existente, deberemos realizar los siguientes pasos:

    1. Recuperar los correos electrónicos que contienen las tablas de Gmail.
    2. Analizar el contenido HTML de los correos electrónicos para extraer las tablas.
    3. Escribir las tablas en una hoja de cálculo de Google existente.

    Código para recuperar correos electrónicos desde Gmail

    Para recuperar los correos electrónicos de Gmail, utilizaremos el servicio GmailApp proporcionado por Google. Aquí está el código para recuperar los correos electrónicos:

    function getEmails() {
      var label = GmailApp.getUserLabelByName('test'); // ingresa el nombre de la etiqueta deseada aquí
      var threads = label.getThreads(); // obtener los hilos con la etiqueta especificada
      for (var i = 0; i < threads.length; i++) { // iterar a través de los hilos
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) { // iterar a través de los mensajes
          var email = messages[j];
          var subject = email.getSubject(); // obtener el asunto del correo electrónico
          var body = email.getBody(); // obtener el cuerpo del correo electrónico
        }
      }
    }
    

    Código para analizar contenido HTML

    Para analizar el contenido HTML, utilizaremos la clase HtmlService y la función parse. Aquí está el código para analizar el contenido HTML:

    function parseHTML(html) {
      var document = HtmlService.parse(html);
      var tables = [];
      var tableElements = document.getElementsByTagName('table');
      for (var i = 0; i < tableElements.length; i++) {
        var table = tableElements[i];
        var values = [];
        var rows = tableRows[i].getElementsByTagName('tr');
        for (var j = 0; j < rows.length; j++) {
          var row = rows[j];
          var cells = row.getElementsByTagName('td');
          var rowValues = [];
          for (var k = 0; k < cells.length; k++) {
            var cell = cells[k];
            rowValues.push(cell.innerHTML.trim());
          }
          values.push(rowValues);
        }
        tables.push(values);
      }
      return tables;
    }
    

    Código para escribir en Google Sheet

    Para escribir en una hoja de cálculo existente de Google, utilizaremos la clase SpreadsheetApp proporcionada por Google. Aquí está el código para escribir en la hoja de cálculo de Google:

    function writeToGoogleSheet(data) {
      var sheet = SpreadsheetApp.getActiveSheet(); // ingresa el nombre de tu hoja aquí si no es la hoja activa
      var numRows = data.length;
      var numCols = data[0].length;
      sheet.getRange(1, 1, numRows, numCols).setValues(data);
    }
    

    Poniéndolo todo junto

    Aquí está el código completo para obtener las tablas de Gmail y escribirlas en una hoja de cálculo de Google existente:

    function getEmails() {
      var label = GmailApp.getUserLabelByName('test'); // ingresa el nombre de la etiqueta deseada aquí
      var threads = label.getThreads(); // obtener los hilos con la etiqueta especificada
      for (var i = 0; i < threads.length; i++) { // iterar a través de los hilos
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) { // iterar a través de los mensajes
          var email = messages[j];
          var subject = email.getSubject(); // obtener el asunto del correo electrónico
          var body = email.getBody(); // obtener el cuerpo del correo electrónico
    
          var tables = parseHTML(body); // analizar contenido HTML para extraer tablas
    
          writeToGoogleSheet(tables); // escribir tablas en Google Sheet
        }
      }
    }
    
    function parseHTML(html) {
      var document = HtmlService.parse(html);
      var tables = [];
      var tableElements = document.getElementsByTagName('table');
      for (var i = 0; i < tableElements.length; i++) {
        var table = tableElements[i];
        var values = [];
        var rows = tableRows[i].getElementsByTagName('tr');
        for (var j = 0; j < rows.length; j++) {
          var row = rows[j];
          var cells = row.getElementsByTagName('td');
          var rowValues = [];
          for (var k = 0; k < cells.length; k++) {
            var cell = cells[k];
            rowValues.push(cell.innerHTML.trim());
          }
          values.push(rowValues);
        }
        tables.push(values);
      }
      return tables;
    }
    
    function writeToGoogleSheet(data) {
      var sheet = SpreadsheetApp.getActiveSheet(); // ingresa el nombre de tu hoja aquí si no es la hoja activa
      var numRows = data.length;
      var numCols = data[0].length;
      sheet.getRange(1, 1, numRows, numCols).setValues(data);
    }
    

    Conclusión

    Utilizando el código anterior, puedes obtener fácilmente tablas de Gmail y escribirlas en una hoja de cálculo de Google existente. Siéntete libre de modificar el código según tus necesidades específicas.

Comments are closed.