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