METTRE À DISPOSITION DES INFORMATIONS SANS ACCÈS AU FICHIER COMPLET
Même si par essence, Google Sheets est un outil collaboratif, il peut arriver qu'il faille mettre à disposition des informations sans que l'on puisse avoir accès aux éléments confidentiels contenus dans le fichier complet.
Créer une vue filtrée, ou créer un fichier avec =IMPORTRANGE() n'est pas la solution car elle permettrait d'avoir accès aux informations.
Ceci peut se faire selon 2 méthodes asynchrones :
- recopier une feuille dans un nouveau fichier qui lui seul sera accessible
- envoyer par mail les informations issues de la feuille
Pour ce faire, les informations à recopier ou envoyer seront isolées dans une feuille spécifique avec des formules classiques telles que query, filter, vlookup/recherchev ... à partie des données complètes.
var feuille = 'nom de la feuille à copier/envoyer'
var id = 'id du fichier' // pour le recopie : id du fichier de destination en lecture
var email = 'nom@email.com' // pour l'envoi par courrier électronique
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem('👉 Générer/Mettre à jour le fichier de lecture', 'maj')
.addItem('👉 Envoyer les informations par email', 'sendEmail')
.addToUi();
}
function maj() {
if (id == SpreadsheetApp.getActiveSpreadsheet().getId()) {
Browser.msgBox('Impossible de copier sur le fichier lui-même !')
return
}
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm");
var fichier = SpreadsheetApp.openById(id)
fichier.setName('Informations - mises à jour : ' + d)
var dest = fichier.getSheets()[0]
dest.getDataRange().clearContent()
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(feuille)
var data = sh.getDataRange().getDisplayValues()
dest.getRange(1, 1, data.length, data[0].length).setValues(data)
Browser.msgBox('Fichier mis à jour !')
}
function sendEmail() {
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm");
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(feuille)
var plage = sh.getDataRange()
MailApp.sendEmail({
to: email,
subject: 'Informations - mises à jour : ' + d,
htmlBody: tableHTML(plage)
})
};
function tableHTML(plage){
var data = plage.getValues()
var tableformat = `cellspacing="2" cellpadding="2" border="1" style="
width:100%;
table-layout:fixed;
font-size:10pt;font-family:arial,sans,sans-serif;
border-collapse:collapse;border:1px solid #ccc;
font-weight:normal;color:black;text-align:center;text-decoration:none;font-style:normal;
background-color:white;`
var htmltable = '<table ' + tableformat +' ">';
data.forEach(function(row,i){
htmltable += '<tr>';
row.forEach(function(col){
if (col === "" || 0) {htmltable += '<td>' + ' ' + '</td>';}
else
if (i === 0){htmltable += '<th>' + col + '</th>';}
else {htmltable += '<td>' + col + '</td>';}
})
htmltable += '</tr>';
})
htmltable += '</table>';
return htmltable
}
Commentaires
Enregistrer un commentaire