Lista de nombres de subcarpetas y enlaces de archivos en hojas de google - script

0

Estoy tratando de obtener una lista de enlaces de archivos de Google Sheet en carpetas y subcarpetas que guardo en Google Drive. Debería verse más o menos así:

una carpeta principal con un par de subcarpetas dentro

Estuve buscando en Google y leyendo foros durante bastante tiempo, pero logré encontrar solo algunos ejemplos de guiones y no todos funcionan. Encontré un script que no es tan malo, ya que trae una lista de archivos con enlaces en una carpeta. pero me gustaría obtener una lista de archivos con enlaces en subcarpetas. Idealmente, todos los enlaces de carpetas y nombres de elementos se enumerarían en una celda con un separador "|". Uno de los mejores ejemplos de script que he encontrado hasta ahora es:

function listFilesInFolder(folderName) {

var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name", "File-Id"]);


//change the folder ID below to reflect your folder's ID (look in the            URL when you're in your folder)
var folder = DriveApp.getFolderById("0ByQ9Zp2ge-pzSjhKdHVWWk0wNnc");
var contents = folder.getFiles();

var cnt = 0;
var file;

while (contents.hasNext()) {
    var file = contents.next();
    cnt++;

       data = [
            file.getName(),
            file.getId(),
        ];

        sheet.appendRow(data);
    };
};

y trae resultados en una hoja

ingrese la descripción de la imagen aquí

Sería muy apreciado si alguien pudiera ayudar a obtener una mejor versión de este código.

ps También hay algunos scripts más grandes que necesitaré en un futuro que estoy dispuesto a pagar. por favor envíeme un mensaje si está interesado.

Josh
fuente
1
Estás haciendo una pregunta fuera de tema. Lea On-Topic , ¿Cómo hago una buena pregunta? y ¿Qué tipo de preguntas debo evitar hacer? .
DavidPostill

Respuestas:

0
// replace Guitar_Score below with the folder for which you want a listing with all subfolders
function listFolderContents() {
  var foldername = 'Guitar_Score';
  // file with this name will be saved in your goolge files
  var folderlisting = 'listing of folder ' + foldername;  
  var ss = SpreadsheetApp.create(folderlisting);
  var sheet = ss.getActiveSheet();
  var folders = DriveApp.getFoldersByName(foldername)
  var folder = folders.next();                  
  //listFilesInFolder(folder, sheet);
  traverseFolder(folder, sheet);
};

function traverseFolder(folder, sheet) { 
  listFilesInFolder(folder, sheet);  
  var subFolders = folder.getFolders();
  while (subFolders.hasNext()) {
    traverseFolder(subFolders.next(), sheet);
  }
}

function listFilesInFolder(folder, sheet) {
  var foldername = folder.getName();
  var contents = folder.getFiles();  
  sheet.appendRow( ['...', foldername] );    
  while(contents.hasNext()) {
    var file = contents.next();
    var name = file.getName();
    var link = file.getUrl();
    sheet.appendRow( [name, link] );     
  } 
}
Sasha Bond
fuente