Inventorier vos fichiers avec Google Sheets et Google Apps Script

Besoin du jour pour terminer la semaine, comment inventorier tous les fichiers d'un dossier et de ses sous dossiers issus de Google Drive ? Cette demande m'a été faite pour suivre la dématérialisation des factures hébergées sur notre espace de stockage préféré. 

Voici une proposition qui peut remplir cette demande.


Une nouvelle fois, le script permet de réaliser cette opération en quelques instants dans cette feuille de calcul à votre disposition.

Je vous propose le script ci dessous que vous pouvez positionner dans l'éditeur de script (Outils > Editeur de script).


function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('[Découvrir G Suite]')
  .addItem('Inventorier vos fichiers', 'listeInventaire')    
  .addToUi(); 
}

// Dressez la liste de tous les fichiers et dossiers, et écrire dans la feuille actuelle
function listeInventaire(){
  var ui = SpreadsheetApp.getUi(); // 
  var resultat = ui.prompt(
    'Inventaire à réaliser',
    'Indiquer l\'ID  du dossier:',
    ui.ButtonSet.OK_CANCEL);
  var button = resultat.getSelectedButton();
  var idDuDossier = resultat.getResponseText();
  if (button == ui.Button.OK) {
    obtenirArborescenceDossiers(idDuDossier, true);
  }   
}

// =======================================
// Obtenir l'arborescence des dossiers
// =======================================

function obtenirArborescenceDossiers(idDuDossier, listeTotale) {
  try {
    // Récupérer le dossier par identifiant
    var dossierParent = DriveApp.getFolderById(idDuDossier);
    
    // Initialiser la feuille de calcul
    var data;
    var feuille = SpreadsheetApp.getActiveSheet();
    feuille.clear();
    feuille.appendRow(["Chemin", "Nom", "Date", "URL", "Dernière mise à jour", "Propriétaire", "Taille"]);
    feuille.getRange(feuille.getLastRow(), 1, 1, feuille.getLastColumn()).setFontWeight("bold");
    
    // Obtenir les fichiers et les dossiers
    obtenirDossiersEnfants(dossierParent.getName(), dossierParent, data, feuille, listeTotale);
    
  } catch (e) {
    Logger.log(e.toString());
  }
};

// Obtenir la liste des fichiers et dossiers et leurs métadonnées en mode récursif
function obtenirDossiersEnfants(nomDossierParent, dossierParent, data, feuille, listeTotale) {
  var dossierEnfants = dossierParent.getFolders();
  
  // Liste des dossiers à l'intérieur du dossier
  while (dossierEnfants.hasNext()) {
    var dossierEnfant = dossierEnfants.next();
    data = [
      nomDossierParent + "/" + dossierEnfant.getName(),
      dossierEnfant.getName(),
      ' ',
      dossierEnfant.getDateCreated(),
      dossierEnfant.getUrl(),
      dossierEnfant.getLastUpdated(),
      dossierEnfant.getOwner().getName(),
      dossierEnfant.getSize()
    ];
    // Ecriture dans la feuille
    feuille.appendRow(data);
    feuille.getRange(feuille.getLastRow(), 1, 1, 1).setFontWeight("bold");
    
    // Liste des fichiers contenus dans le dossier
    var fichiers = dossierEnfant.getFiles();
    while (listeTotale & fichiers.hasNext()) {
      var fichierEnfant = fichiers.next();
      data = [
        "  " + nomDossierParent + "/" + dossierEnfant.getName() + "/" + fichierEnfant.getName(),
        fichierEnfant.getName(),
        fichierEnfant.getMimeType(),    
        fichierEnfant.getDateCreated(),
        fichierEnfant.getUrl(),
        fichierEnfant.getLastUpdated(),
        fichierEnfant.getOwner().getName(),
        fichierEnfant.getSize()
      ];
      // Ecriture dans la feuille
      feuille.appendRow(data);
    }
    
    // Appel récursif du sous-dossier
    obtenirDossiersEnfants(nomDossierParent + "/" + dossierEnfant.getName(), dossierEnfant, data, feuille, listeTotale);  
  }
};





Noter que ce cas d'usage a été construit avec Google Sheets, tableur de la suite bureautique et collaborative G Suite.
Pour 5,20 euros/mois, obtenez une suite bureautique complète avec votre adresse de messagerie à votre nom. Cliquer sur ce logo pour un essai gratuit.