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
J'espère que ce nouveau cas d'usage vous aidera dans vos développements.
/** @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); } }