3 votes

Supprimer le formatage html lors de l'obtention du corps d'un message gmail en javascript

Je voudrais supprimer le formatage html dans mon script de google apps. J'effectue actuellement une recherche dans le courrier électronique et j'imprime les résultats dans une feuille de calcul Google. J'aimerais savoir s'il existe un moyen de remplacer le texte. Je connais les expressions rationnelles, mais je ne pense pas qu'elles fonctionnent avec la fonction getBody.

J'apprécierais vraiment un retour d'information ou de l'aide à ce sujet.

Código:

function Search() {

var sheet   = SpreadsheetApp.getActiveSheet();
var row     = 2;

// Clear existing search results
sheet.getRange(2, 1, sheet.getMaxRows() - 1, 4).clearContent();

// Which Gmail Label should be searched?
var label   = sheet.getRange("F3").getValue();

// Get the Regular Expression Search Pattern
var pattern = sheet.getRange("F4").getValue();

// Retrieve all threads of the specified label
var threads = GmailApp.search("in:" + label);

for (var i = 0; i < threads.length; i++) {

var messages = threads[i].getMessages();

for (var m = 0; m < messages.length; m++) {
 var msg = messages[m].getBody();

// Does the message content match the search pattern?
if (msg.search(pattern) !== -1) {

 // Print the message subject
 sheet.getRange(row,3).setValue(messages[m].getBody());

3voto

Mogsdad Points 11078

Remplacer ceci :

// Print the message subject
sheet.getRange(row,3).setValue(messages[m].getBody());

Avec ceci :

// Print the message subject
sheet.getRange(row,3).setValue(getTextFromHtml(messages[m].getBody()));

Les getTextFromHtml() a été adaptée à partir de cette réponse avec en plus la prise en charge d'un formatage de base (listes numérotées et à puces, sauts de paragraphes).

function getTextFromHtml(html) {
  return getTextFromNode(Xml.parse(html, true).getElement());
}

var _itemNum; // Used to lead unordered & ordered list items.

function getTextFromNode(x) {
  switch(x.toString()) {
    case 'XmlText': return x.toXmlString();
    case 'XmlElement':
      var name = x.getName().getLocalName();
      Logger.log(name);
      var pre = '';
      var post = '';
      switch (name) {
        case 'br':
        case 'p':
          pre = '';
          post = '\n';
          break;
        case 'ul':
          pre = '';
          post = '\n';
          itemNum = 0;
          break;
        case 'ol':
          pre = '';
          post = '\n';
          _itemNum = 1;
          break;
        case 'li':
          pre = '\n' + (_itemNum == 0 ? ' - ' : (' '+ _itemNum++ +'. '));
          post = '';
          break;
        default:
          pre = '';
          post = '';
          break;
      }
      return pre + x.getNodes().map(getTextFromNode).join('') + post;
    default: return '';
  }
}

2voto

Fernando Rivera Points 21

D'après cette réponse : Google Apps scripts - Extraire des données de gmail dans une feuille de calcul

Vous pouvez renoncer à la fonction getTextFromHTML en utilisant simplement getPlainBody() ; au lieu de getBody() ;.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X