Extraire des information d'un mail depuis Gmail vers Sheets ?

mais cela fonctionne ou pas maintenant ?

oups j'ai édité mon msg en même temps que ta réponse.

non j'ai trouvé une autre alternative

Bonjour,

.replace(/(€|$)/ig,"")

Bonne Soirée

Bonjour,

.replace(/(€|$)/ig,"")

Bonne Soirée

bonjour,

effectivement tes parenthèses m'ont mis sur la voie ( je ne les avais pas mise encore dans mes tests ).

la bonne formule concernant le $ est :

.replace(/(\$)/ig,"")

( il manquait un petit "\" sur ta formule imoka )

merci !

Bonjour !

j'ai un problème petit moment que je n'avais pas utilisé le script et après "étude" j'ai un problème que je n'avais pas détecté !

var requete = "is:unread label:realT/Tokens";
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Order/Rent')

function capturerEmails() {

  var threads = GmailApp.search(requete);

  threads.forEach(thread => {
    var msgs = thread.getMessages();
    for (var j in msgs) {
      var r = getLastDataRow(feuille)+1
      //var data = [] 
      //var prov = []
      var msg = msgs[j].getBody().replace(/\n|\t/g,'')
      //prov.push(msgs[j].getDate()) 
      //data.push(prov)
      //feuille.getRange(r,1,1,1).setValues(data);
      //feuille.getRange(r,2,1,1).setValue(importOrder(msg));
      var order = importOrder(msg)
      var date = msgs[j].getDate()
      var a = (importTableHTML(msg,date,order))
      feuille.getRange(r,1,a.length,a[0].length).setValues(a);     
      }
    // et  
      var r = feuille.getRange(2, 1, feuille.getLastRow()-1, feuille.getLastColumn());    
      r.sort([{column: 1, ascending: false}]);

    GmailApp.markThreadsRead(threads);
  })
}

//importation du titre contenu dans la balise h2
function importOrder(source) {
  var data=''
    var debut = source.indexOf('<h2')
    var fin = source.indexOf('</h2')
    var titre = source.substring(debut,fin)
    debut = titre.indexOf('>')+2
    data = titre.substring(debut)
    var regExp = new RegExp("[0-9]+", "g"); 
    var commande = regExp.exec(data)[0];
  return(commande);
}

//importation du tableau (contenu de tbody)
function importTableHTML(source,date,order) {
  var data = [];
  try{
    var debut = source.indexOf('<tbody')
    var fin = source.indexOf('</tbody')
    var html = source.substring(debut,fin)
    var trs = html.split('<tr')
    for (var i=1;i<trs.length;i++){
      var tds = trs[i].split('<td')
      var prov=[]
      prov.push(date)
      prov.push(order)
      for (var j=1;j<tds.length;j++){
        prov.push(stripTags('<td'+tds[j]).replace('$',''))
      }
      data.push(prov)
    }
  }catch(e){
    data.push([''])
  }
  return(data);
}

function stripTags(body) {
  var regex = /(<([^>]+)>)/ig;
  return body.replace(regex,"").replace(/\r\n|\n|\r|\t/g,'');
}

function getLastDataRow(sheet) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("C" + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }
}

le problème :

j'importe bien mes mails, bon format etc... en revanche, la 1ere ligne s'écrase lorsque je veux importer un 2ieme mail !

par ex. j'importe 1 mail.

image

et ensuite un 2ieme

image

résultat j'ai perdu un mail du 15.10.2021 lorsque j'ai importé celui du 11.10.2021

Si jamais il y a une explication et une solution, moi j'y arrive pas

Bon, j'ai trouvé...

j'ai essayé le script sur un Gsheet vierge, et pas de problème. c'est donc un autre script de mon doc. qui interfère avec celui-ci…

je part en recherche

PS : du coup... Comment bloquer une fonction pour ne pas avoir de problème avec les autres script ? j'ai essayé de l'enfermer dans une fonction "mère" mais elle ne s'exécute plus....

car si chaque mots clés peuvent communiquer et correspondre entre chaque script je m'en sort plus ahah

function emailRealT(){

  function capturerEmails(){

    var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Order')
    var cellRent = feuille.getRange('A2:G');
    var requete = "is:unread label:realT/Tokens";
    var threads = GmailApp.search(requete);

    threads.forEach(thread => {
      var msgs = thread.getMessages();
      for (var j in msgs) {
        var n = getLastDataRow(feuille,"A")+1;
        //var data = [] 
        //var prov = []
        var msg = msgs[j].getBody().replace(/\n|\t/g,'')
        //prov.push(msgs[j].getDate()) 
        //data.push(prov)
        //feuille.getRange(r,1,1,1).setValues(data);
        //feuille.getRange(r,2,1,1).setValue(importOrder(msg));
        var order = importOrder(msg)
        var date = msgs[j].getDate()
        var a = (importTableHTML(msg,date,order));
        feuille.getRange(n,1,a.length,a[0].length).setValues(a); 
        cellRent.sort({column: 1, ascending: false});  
        }
      GmailApp.markThreadsRead(threads);
    })
  }

  //importation du titre contenu dans la balise h2
  function importOrder(source) {
    var data=''
    var debut = source.indexOf('<h2')
    var fin = source.indexOf('</h2')
    var titre = source.substring(debut,fin)
    debut = titre.indexOf('>')+2
    data = titre.substring(debut)
    var regExp = new RegExp("[0-9]+", "g"); 
    var commande = regExp.exec(data)[0];
    return(commande);
  }

  //importation du tableau (contenu de tbody)
  function importTableHTML(source,date,order) {
    var data = [];
    try{
      var debut = source.indexOf('<tbody')
      var fin = source.indexOf('</tbody')
      var html = source.substring(debut,fin)
      var trs = html.split('<tr')
      for (var i=1;i<trs.length;i++){
        var tds = trs[i].split('<td')
        var prov=[]
        prov.push(date)
        prov.push(order)
        for (var j=1;j<tds.length;j++){
          prov.push(stripTags('<td'+tds[j]).replace('$',''))
        }
      data.push(prov)
      }
    }catch(e){
      data.push([''])
    }
  return(data);
  }

  function stripTags(body) {
    var regex = /(<([^>]+)>)/ig;
    return body.replace(regex,"").replace(/\r\n|\n|\r|\t/g,'');
  }

  function getLastDataRow(sheet,col) {
    var lastRow = sheet.getLastRow();
    var range = sheet.getRange("A" + lastRow);
    if (range.getValue() !== "") {
      return lastRow;
    } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
    }
  }
}

Rechercher des sujets similaires à "extraire information mail gmail sheets"