Inventorier les fichiers sous Drive dans Google Sheets

Nouvelle idée de script en ce week-end de Pâques, comment inventorier les fichiers d'un dossier et de ses sous dossiers dans une feuille de calcul Google Sheets ?

Inventorier vos fichiers

Pour cela, il est nécessaire de créer une nouvelle fois un script qui va rechercher plusieurs éléments pour remplir votre feuille de calcul notamment : 
  • le chemin du fichier,
  • le nom du fichier
  • le type
  • la date de création,
  • l'URL,
  • la date de dernière mise à jour
  • le propriétaire du fichier
  • la taille du fichier

Le fonctionnement est très simple ; j'ai rajouté un menu nommé Découvrir G Suite avec une seule option Inventaire à réaliser.
Choix de l'ID du dossier à inventorier

Indiquer l'ID du dossier, c'est à dire ce qui suit l'URL https://drive.google.com/drive/folders/xxxxx quand vous êtes placés sur le dossier souhaité dans Google Drive et cliquer sur OK.

Je vous propose le script ci dessous à inclure dans votre feuille de calcul depuis le menu Outils > Éditeur de script


/** @OnlyCurrentDoc */

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", "Type", "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);
    obtenirFichiersRacine(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);  
  }
  
};

// Obtenir la liste des fichiers racine
function obtenirFichiersRacine(nomDossierParent, dossierParent, data, feuille, listeTotale) {
  
  // Liste des fichiers contenus dans le dossier
  var fichiers = dossierParent.getFiles();
  while (listeTotale & fichiers.hasNext()) {
    var fichierEnfant = fichiers.next();
    data = [
      nomDossierParent,
      fichierEnfant.getName(),
      fichierEnfant.getMimeType(),    
      fichierEnfant.getDateCreated(),
      fichierEnfant.getUrl(),
      fichierEnfant.getLastUpdated(),
      fichierEnfant.getOwner().getName(),
      fichierEnfant.getSize()
    ];
    // Ecriture dans la feuille
    feuille.appendRow(data);
  }
  
}
J'espère que ce nouveau cas d'usage vous aidera dans vos développements.