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 :

  1. recopier une feuille dans un nouveau fichier qui lui seul sera accessible
  2. 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(11data.lengthdata[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({
    toemail,
    subject'Informations - mises à jour : ' + d,
    htmlBodytableHTML(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>' + '&nbsp;' + '</td>';} 
      else
        if (i === 0){htmltable += '<th>' + col + '</th>';}
        else {htmltable += '<td>' + col + '</td>';}
    })
    htmltable += '</tr>';
  })
  htmltable += '</table>';
  return htmltable
}

Commentaires

Posts les plus consultés de ce blog

INSÉRER UN TABLEAU PROVENANT D'UNE FEUILLE DANS UN COURRIEL

NAVIGUER AU SEIN D'UN FICHIER À L'AIDE D'UN MENU DÉROULANT