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.