Insertion de texte avec app script
Bonjour,
Deuxième sujet rapide du jours.
Le script ci-dessous me permet d'importer des mails et les données que je souhaite.. puis l'écriture se fait sur une plage précise.. ( entre A2:F )
Comment avoir la possibilité d'ajouter un texte de manière automatique en "G" à la fin de chaque nouvelles ecritures de données suite à l'importation d'un mail ?
Voici le script que j'utilise :
function Commandes(){
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi')
var cellRent = feuille.getRange('A2:F');
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 = getLastDataRowrealtorder(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 = importrealtOrder(msg)
var date = msgs[j].getDate()
var method = importrealtMethod(msg)
var a = (importTableHTMLrealtorder(msg,date,order,method));
feuille.getRange(n,1,a.length,a[0].length).setValues(a);
cellRent.sort({column: 1, ascending: true});
}
GmailApp.markThreadsRead(threads);
})
}
//importation de la methode de paiement contenu dans la balise tfoot
function importrealtMethod(source) {
var data=''
try{var commande = source.match(/Payment method:[\s\S\w]+?"left">(.*)<\/td>/)[1]}catch(e){var commande = ''}
Logger.log(commande)
return(commande);
}
//importation du titre contenu dans la balise h2
function importrealtOrder(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 importTableHTMLrealtorder(source,date,order,method) {
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(stripTagsrealtorder('<td'+tds[j]).replace('$',''))
}
data.push(prov)
prov.push(method)
}
}catch(e){
data.push([''])
}
return(data);
}
function stripTagsrealtorder(body) {
var regex = /(<([^>]+)>)/ig;
return body.replace(regex,"").replace(/\r\n|\n|\r|\t/g,'');
}
function getLastDataRowrealtorder(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();
}
}Et je sais pas comment avoir la possibilité de rajouter un texte ( qui sera toujours le même ) après chaque enregistrements
Bonne soirée et merci !
Si tu veux ajouter un texte au bout de la ligne ...
prov.push('bla bla bla')
data.push(prov)au passage, je m'interroge sur ceci
prov.push(method)car prov est détruit juste après dans la boucle qui recommence !
Quels changements aurais-tu fait concernant le "method" ?
Si je l'enlève de le la fonction
function importTableHTMLrealtorder(source,date,order,method)ça ne fonctionne pas..
et merci pour la solution ! qui été simple en faite… j'ai juste eu besoins de mettre
prov.push('bla bla bla')Comme ceci
function Commandes(){
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi')
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 = getLastDataRowrealtorder(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 = importrealtOrder(msg)
var date = msgs[j].getDate()
var method = importrealtMethod(msg)
var a = (importTableHTMLrealtorder(msg,date,order,method));
feuille.getRange(n,1,a.length,a[0].length).setValues(a);
cellRent.sort({column: 1, ascending: true});
}
GmailApp.markThreadsRead(threads);
})
}
//importation de la methode de paiement contenu dans la balise tfoot
function importrealtMethod(source) {
var data=''
try{var commande = source.match(/Payment method:[\s\S\w]+?"left">(.*)<\/td>/)[1]}catch(e){var commande = ''}
Logger.log(commande)
return(commande);
}
//importation du titre contenu dans la balise h2
function importrealtOrder(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 importTableHTMLrealtorder(source,date,order,method) {
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(stripTagsrealtorder('<td'+tds[j]).replace('$',''))
}
data.push(prov)
prov.push(method)
prov.push('xDai')
}
}catch(e){
data.push([''])
}
return(data);
}
function stripTagsrealtorder(body) {
var regex = /(<([^>]+)>)/ig;
return body.replace(regex,"").replace(/\r\n|\n|\r|\t/g,'');
}
function getLastDataRowrealtorder(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();
}
}Et tout semble fonctionner correctement !
Si tu vois des éléments qui te choque dans ce script je peux tenter des corrections si nécessaire..
Bonne journée !