Envoi automatique d'email en appuyant sur bouton et comprenant uniquement un tableau sheet avec envoi en plusieurs étape
Publié : 06 déc. 2022 19:46
Bonjour,
J'aurai svp besoin de conseil sur mon script qui s'applique à un onglet parmi tant d'autres (tous avec le même format) sachant que chaque onglet comporte 3 parties de tableau à envoyer en automatique par email à différents moments de la journée.
Voici le script :
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AMI')
var email = feuille.getRange('B86').getValue()
function envoyerEmail_TG2_AMI() {
MailApp.sendEmail({to:email,
subject: 'CR AMI 2',
htmlBody: myTableHTML()})
};
function myTableHTML(){
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AMI')
var plage = feuille.getRange('A1:J29');
return (tableHTML(plage))
}
function tableHTML(plage){
var data = plage.getDisplayValues()
var taille = plage.getFontSizes()
var fond = plage.getBackgrounds()
var couleur = plage.getFontColors()
var police = plage.getFontFamilies()
const mergedRanges = plage.getMergedRanges();
var flag = Array.from({ length: plage.getNumRows() }, () => Array.from({ length: plage.getNumColumns() }, () => true));
var layout = Array.from({ length: plage.getNumRows() }, () => Array.from({ length: plage.getNumColumns() }, () => ''));
mergedRanges.forEach((rng,i) => {
for (x=rng.getRow();x<rng.getRow()+rng.getNumRows();x++){
for (y=rng.getColumn();y<rng.getColumn()+rng.getNumColumns();y++){
flag[x-1][y-1]=false
}
}
flag[rng.getRow()-1][rng.getColumn()-1]=true
layout[rng.getRow()-1][rng.getColumn()-1]=' colspan="'+rng.getNumColumns()+'" rowspan="'+rng.getNumRows()+'" '
});
var htmltable = '<table cellspacing=0 cellspadding=2px>';
for (row = 0; row<data.length; row++){
htmltable += '<tr>';
for (col = 0 ;col<data[row].length; col++){
if (flag[row][col]){
if (data[row][col] === "" || 0) {
htmltable += '<td '+layout[row][col]+' style="background-color:' + fond[row][col] + ';">' + ' ' + '</td>';
}
else
htmltable += '<td '+layout[row][col]+' style="border: 1px solid black; font-family:' + police[row][col] + '; background-color:' + fond[row][col] + '; color:' + couleur[row][col] + '; font-size:' + taille[row][col] + 'px;">' + data[row][col].replace(/(\r\n|\n|\r)/gm,"<br>") + '</td>';
}
}
htmltable += '</tr>';
}
htmltable += '</table>';
return htmltable
}
Lorsque je modifie la plage " var plage = feuille.getRange('A1:J29'); " pour créer un 2eme envoi automatique sur la même feuille mais un tableau différent en remplacant par " var plage = feuille.getRange('A30:J48') --> la 2eme macro envoi email ne fonctionne pas !
Merci par avance de votre aide
Cdt
J'aurai svp besoin de conseil sur mon script qui s'applique à un onglet parmi tant d'autres (tous avec le même format) sachant que chaque onglet comporte 3 parties de tableau à envoyer en automatique par email à différents moments de la journée.
Voici le script :
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AMI')
var email = feuille.getRange('B86').getValue()
function envoyerEmail_TG2_AMI() {
MailApp.sendEmail({to:email,
subject: 'CR AMI 2',
htmlBody: myTableHTML()})
};
function myTableHTML(){
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AMI')
var plage = feuille.getRange('A1:J29');
return (tableHTML(plage))
}
function tableHTML(plage){
var data = plage.getDisplayValues()
var taille = plage.getFontSizes()
var fond = plage.getBackgrounds()
var couleur = plage.getFontColors()
var police = plage.getFontFamilies()
const mergedRanges = plage.getMergedRanges();
var flag = Array.from({ length: plage.getNumRows() }, () => Array.from({ length: plage.getNumColumns() }, () => true));
var layout = Array.from({ length: plage.getNumRows() }, () => Array.from({ length: plage.getNumColumns() }, () => ''));
mergedRanges.forEach((rng,i) => {
for (x=rng.getRow();x<rng.getRow()+rng.getNumRows();x++){
for (y=rng.getColumn();y<rng.getColumn()+rng.getNumColumns();y++){
flag[x-1][y-1]=false
}
}
flag[rng.getRow()-1][rng.getColumn()-1]=true
layout[rng.getRow()-1][rng.getColumn()-1]=' colspan="'+rng.getNumColumns()+'" rowspan="'+rng.getNumRows()+'" '
});
var htmltable = '<table cellspacing=0 cellspadding=2px>';
for (row = 0; row<data.length; row++){
htmltable += '<tr>';
for (col = 0 ;col<data[row].length; col++){
if (flag[row][col]){
if (data[row][col] === "" || 0) {
htmltable += '<td '+layout[row][col]+' style="background-color:' + fond[row][col] + ';">' + ' ' + '</td>';
}
else
htmltable += '<td '+layout[row][col]+' style="border: 1px solid black; font-family:' + police[row][col] + '; background-color:' + fond[row][col] + '; color:' + couleur[row][col] + '; font-size:' + taille[row][col] + 'px;">' + data[row][col].replace(/(\r\n|\n|\r)/gm,"<br>") + '</td>';
}
}
htmltable += '</tr>';
}
htmltable += '</table>';
return htmltable
}
Lorsque je modifie la plage " var plage = feuille.getRange('A1:J29'); " pour créer un 2eme envoi automatique sur la même feuille mais un tableau différent en remplacant par " var plage = feuille.getRange('A30:J48') --> la 2eme macro envoi email ne fonctionne pas !
Merci par avance de votre aide
Cdt