1
votes

(Edited) After finding how to return all images links and names of multiple subfolders in a google sheet, I want them all to be sorted. When it returns what I want in my google sheet, the folders are not sorted in order (my folders names are 0, 1, 2, 3...). And when it returns the images in the folders, they are not sorted by names as well (their names are also 01.png, 02.png...), I can use the google sheet method to sort them alphabetically, but it's a bit too long to do it for every folders, here is what I mean and the script :

Google sheet result

var eps0= [ //not the first folder

//wanting here to sort every lines by image names   
021.png-----https://drive.google.com/file/d/10TFXIX_K4qawPjrMbA9X3eDMNzWDSiAC/view?usp=drivesdk     
007.png-----https://drive.google.com/file/d/12NcnKgbpbC1kHftIoNHMPqz2GWZW1CuU/view?usp=drivesdk     
017.png-----https://drive.google.com/file/d/13bu0XMkOduyoD0QTlGs_DNob--kkuItz/view?usp=drivesdk     
014.png-----https://drive.google.com/file/d/13o-coMvTiNbNY-b4gIiig5WSUQKMvo0N/view?usp=drivesdk     
022.png-----https://drive.google.com/file/d/1EXwPLzg-YhCZ9NkSqwurIYAhyPCVHAMF/view?usp=drivesdk     
003.png-----https://drive.google.com/file/d/1HUOyA9FvIKzKAq-jPt8L2RwzigKaKP4s/view?usp=drivesdk     
015.png-----https://drive.google.com/file/d/1J_DJZc34i-IElDe73ScfRFgfZZO9CGpp/view?usp=drivesdk     
011.png-----https://drive.google.com/file/d/1N1KsTEto10iYcU1soV7bmr_1n3y_Atmr/view?usp=drivesdk     
008.png-----https://drive.google.com/file/d/1RXa-L8QTLs-OsmQXo8CsTu707-h8EKxR/view?usp=drivesdk     
006.png-----https://drive.google.com/file/d/1VgFmXIFQBHxFTeDpmsl8WY71LLZKJq2A/view?usp=drivesdk     
005.png-----https://drive.google.com/file/d/1WxGDOW-J18GkWMMOLbp9z-UKHymuR_bm/view?usp=drivesdk     
016.png-----https://drive.google.com/file/d/1XDRrDOOVGvJUJn0Wl414bnXlXl_2i8iX/view?usp=drivesdk     
001.png-----https://drive.google.com/file/d/1ZGiSaoh6nGCtHUb28yuQVii30Y8vkfo5/view?usp=drivesdk     
010.png-----https://drive.google.com/file/d/1bUCpw8VoQZtbA5ti0zovWDPjaycKNlcA/view?usp=drivesdk     
013.png-----https://drive.google.com/file/d/1gfhHydPXWSHGkHuOuJUoFadMtiIcmMW9/view?usp=drivesdk     
009.png-----https://drive.google.com/file/d/1n9UqVP4HeRWWRVDqULC9QsSDqRmSTK1v/view?usp=drivesdk     
004.png-----https://drive.google.com/file/d/1pBqMIT3YhdNI8MQQ4KxPE3Ms2IfthHIH/view?usp=drivesdk     
012.png-----https://drive.google.com/file/d/1pVkfGeAwZIoVDSUfL4aBNOXPp3nvFV3n/view?usp=drivesdk     
020.png-----https://drive.google.com/file/d/1tSGOntKlWW67GPXKEzX5HMxamo6O7s8x/view?usp=drivesdk     
019.png-----https://drive.google.com/file/d/1u3c4wU5lzTyXkvKXQ3xiraFNEXJrcNQQ/view?usp=drivesdk     
018.png-----https://drive.google.com/file/d/1xHmBAQy59EGJeFVhCUgx0dyALQoFSJ8c/view?usp=drivesdk     
];

Script

const ss = SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
let counter = 0;
var names=[],str;

function getArray(){
  folderStuffRecusion('1P7lRmnZAyByLJHHxnc9ICij1S_l1J8IV')
}

function folderStuffRecusion(folderID) {
  const parent = DriveApp.getFolderById(folderID);
  const folders = parent.getFolders();
  //Sort all folders (0 - 1 - 2 - 3...)
  [folders].sort();

  while (folders.hasNext()) {

    const child = folders.next();
    const files = child.getFiles();
    var nameEps = 'var eps' + counter + '= ['
    names.push([nameEps]);

    while (files.hasNext()) {

      const file = files.next();

      str= file.getName() + "-----" + file.getUrl();

      //Sort files by file names of each folders (0 - 1 - 2 - 3...)
      [str].sort(); 

      names.push([str]);
      
    }
    names.push(['];'])
    counter++;
    folderStuffRecusion(child.getId())
  }
  s.getRange(c.getRow(),c.getColumn(),names.length).setValues(names);
}

1
@YuriKhristich you may want to consult The use of gender-specific pronouns on Stack OverflowDaImTo
@legia can you explain what the issue is with your current solution?DaImTo
@DaImTo My issue is I don't know how to get the script to work in all of the subfolders of one folder. It's too long to use this code at every subfolder and put its ID everytimesLegia
Does this answer your question? Google apps script - iterate folder and subfolder. Note how the accepted answer uses a function called getSubFolders() which contains a call to itself - which is one technique for searching through a hierarchy (using recursion, in this case).andrewJames
"I want them all to be sorted" - This is really a new question (one question per question). Also, it's almost certainly already been asked and answered before, on this site. Have you been able to do any research? What have you tried? What problems did you encounter?andrewJames

1 Answers

1
votes

I've made a recursive function that should put all the data you need into an array.

You can expand on the getArray function by writing it to a sheet or something alike.

const ss = SpreadsheetApp.getActiveSpreadsheet();
let array = [];
let counter = 0;

function getArray(){
  folderStuffRecusion('insert folder id of the main folder')
  console.log(array)
}

function folderStuffRecusion(folderID) {
  const parent = DriveApp.getFolderById(folderID);
  const folders = parent.getFolders();
  while (folders.hasNext()) {
    const child = folders.next();
    const files = child.getFiles();
    while (files.hasNext()) {
      const file = files.next();
      array.push(`var eps ${counter} = [${file.getUrl()},${file.getName()}]`);
      counter++;
    }
    folderStuffRecusion(child.getId())
  }
}

Result

With dummy data it yields an array looking like this. enter image description here