Recherche en masse de fichiers sur Drive et indexage sur Gsheet

Bonsoir à tous,

Je cherche à indexer tous les fichiers d'un Drive partagé dont le nom contient un mot clé (PMD), qui identifie une typologie claire de Gsheet que je voudrais récupérer, quel que soit l'emplacement dans Drive.

Je voudrais ensuite que tous les fichiers trouvés du type Gsheet et dont le nom contient PMD soient listés, avec leur URL.

Est ce quelque chose qui semble faisable?

Merci d'avance pour votre aide

Bonjour,

tu peux utiliser cet utilitaire et ensuite faire un query sur le résultat

https://www.sheets-pratique.com/fr/telechargements/utilitaires/explorer-le-drive-sheets-no534

Merci Steelson je regarde ce que cela donne!

L'esprit est exactement ce que je cherche, c'est fabuleux. En revanche je n'arrive pas à spécifier un dossier de travail, ça a l'air de toujours chercher dans le meme dossier...faut-il coller l'url drive entier sur le premier onglet pour spécifier le dossier?

non, laisse B2 vierge

Mais comment réduire la recherche à un dossier (et ses sous dossiers), plutot qu'à tout un Drive?

mets le nom du dossier en B2 (pas le ID) comme c'est indiqué il me semble

Oui ok je m'en suis rendu compte après coup. Mais j'ai plusieurs dossiers qui ont le meme nom sur drive; j'ai essayé de remplacer par getFoldersByID mais ça ne fonctionne pas non plus comme attendu... :(

regarde aussi ce fil, il devrait t'aider moyennant quelques modifications https://forum.excel-pratique.com/sheets/google-apps-script-drive-152468#p941887

Merci Steelson. J'ai atteint un résultat correct avec les solutions proposées, mais je me demande encore pourquoi getid ne fonctionne pas et comment faire pour passer en revue de manière exhaustive l'ensemble des dossiers, sous (sous /sous/sous...) dossiers...

Cela fonctionne avec l'ID en remplaçant

var dos = param.getRange('B2').getValue();

par

var dos = DriveApp.getFolderById('18akqH______________v4TqCM');

dans le script du fichier posté.

function explorerDrive() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Explorateur');
  var param = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Paramètres');
  var dos = param.getRange('B2').getValue();
  var racine = param.getRange('B3').getValue();
  var sousdos = param.getRange('B4').getValue();
  feuille.clear();
  feuille.appendRow(["dossier", "nom", "date mise à jour", "URL"]);
  try {
    if (dos == ''){
      var dossier = DriveApp.getRootFolder();
    }else{
      var dossiers = DriveApp.getFoldersByName(dos);
      var dossier = dossiers.next();
    }
    if (racine || dos !=''){listeFichiers(dossier)}
    if (sousdos){listeSousDossiers(dossier)}
  } catch (e) {
    Logger.log(e.toString());
  }
}

function listeSousDossiers(dossier) {
  var sousDossiers = dossier.getFolders();
  while (sousDossiers.hasNext()) {
    var sousDossier = sousDossiers.next();
    listeFichiers(sousDossier)
    listeSousDossiers(sousDossier);
  }
}

function listeFichiers(dossier){
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Explorateur');
  var data = [];
  var fichiers = dossier.getFiles();
  while (fichiers.hasNext()) {
    var fichier = fichiers.next();
    data = [ 
      dossier.getName(),
      fichier.getName(),
      fichier.getLastUpdated(),
      fichier.getUrl(),
      ];
    feuille.appendRow(data);
  }
}

Hello après remplacement, si je laisse l'id du dossier dans la cellule B2 j'obtiens cette erreur:

capture d e cran 2021 02 06 a 11 17 31

Et si je la mets dans le code directement, le script tourne quelques secondes et me sort 0 résultat :(

Donne moi le début et la fin de l'id (environ 10 caractères)

Chez moi je n'ai pas eu de problème

Il y avait une erreur de frappe quand j'ai retranscris la ligne de code ci-dessus (dos et non dosr), essaie ceci en mettant l'ID en B2

function explorerDrive() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Explorateur');
  var param = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Paramètres');
  var dos = param.getRange('B2').getValue();
  if (dos != ''){var dos = DriveApp.getFolderById(dos)};
  var racine = param.getRange('B3').getValue();
  var sousdos = param.getRange('B4').getValue();
  feuille.clear();
  feuille.appendRow(["dossier", "nom", "date mise à jour", "URL"]);
  try {
    if (dos == ''){
      var dossier = DriveApp.getRootFolder();
    }else{
      var dossiers = DriveApp.getFoldersByName(dos);
      var dossier = dossiers.next();
    }
    if (racine || dos !=''){listeFichiers(dossier)}
    if (sousdos){listeSousDossiers(dossier)}
  } catch (e) {
    Logger.log(e.toString());
  }
}

function listeSousDossiers(dossier) {
  var sousDossiers = dossier.getFolders();
  while (sousDossiers.hasNext()) {
    var sousDossier = sousDossiers.next();
    listeFichiers(sousDossier)
    listeSousDossiers(sousDossier);
  }
}

function listeFichiers(dossier){
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Explorateur');
  var data = [];
  var fichiers = dossier.getFiles();
  while (fichiers.hasNext()) {
    var fichier = fichiers.next();
    data = [ 
      dossier.getName(),
      fichier.getName(),
      fichier.getLastUpdated(),
      fichier.getUrl(),
      ];
    feuille.appendRow(data);
  }
}

c'est extra merci!!!

N'oublie pas de clore le fil de discussion en cliquant sur

Juste une dernière question sur le sujet, y-a-t-il un moyen (commande "extratoken, un truc du genre") de faire en sorte que la recherche puisse aller jusqu'au bout sans etre interrompue? Car j'ai eu ça:

capture d e cran 2021 02 06 a 16 32 33

Bonjour,

OUI, supprime 90% des lignes non utilisées. Si ta feuille fait 1000 lignes, n'en garde que 100.

Là j'étais par exemple à 7000 fichiers, l'exploration n'était pas terminée,et le fichier ajoutait plutot des lignes tout seul!

ok excuse moi j'ai répondu en pensant à un autre topic

non je n'ai pas de solutions à part découper en sous-dossiers plus petits dans ton drive et faire l'exploration d'un sous-dossier à la fois

en effet c'est long !

Rechercher des sujets similaires à "recherche masse fichiers drive indexage gsheet"