Возьмите папки разных родительских папок и отобразите вывод в листах Google. - PullRequest
0 голосов
/ 27 июня 2019

Я бы хотел взять все папки под несколькими родительскими папками.Я использую код ниже, но думаю, что-то не хватает.

function searchFolders() {
  var sheet1 = SpreadsheetApp.getActive().getSheetByName('Search Folder');
  var range = [];
  range.push([ "FolderId", "Folder Name", "Owner", "Date Created", "URL" ]);

  var parentId = sheet1.getRange(2,1,sheet1.getLastRow(),sheet1.getLastColumn()).getValues(); // list of parent folderids

  for (i=0; i<parentId.length; i++) {
    var parfolder = DriveApp.getFolderById(parentId[i][0]).getFolders();  //retrieves the folders
    while(parfolder.hasNext()){
      var pchild = parfolder.next();

      var row = [];
      row.push(pchild.getId(),
               pchild.getName(),
               pchild.getOwner().getEmail(),
               pchild.getDateCreated(),
               pchild.getUrl())
      range.push(row);

      sheet1.getRange(i+2,2,range.length,range[0].length).setValues(range);
    }
  }
}

Я надеялся, что код захватит родительский фолдерид, а затем отобразит результаты в столбцах BF.

parent folderid - выводить список папок (Cols BF), если он имеет 2, тогда захватывать следующий родительский folderid - перечислять следующие папки в 4-й строке ... и т. Д.И если папка пуста, чтобы написать «нет», тогда переходите к следующему родительскому folderid.Я не добавил этот сценарий в свой код (только что подумал).

В настоящее время результаты выглядят следующим образом: Заголовки печатаются 3 раза в строках 2-4 (столбцы BF), а затем перечисляютсяпапки в строке 5.

enter image description here

1 Ответ

0 голосов
/ 28 июня 2019

Ваш предыдущий повторял строки заголовка, потому что вы, по сути, каждый раз записывали всю переменную row, и в ней всегда был заголовок. Я переписал функцию, теперь она организована так, как на скриншоте. Попробуйте следующий код:

ОБНОВЛЕННЫЙ КОД

function newSearch(){
  var ss = SpreadsheetApp.getActiveSheet();

  var i = ss.getLastRow() + 1; // Next empty cell in A
  var j = ss.getRange("B1:B").getValues(); // Same as i, but for columns B-F
  var bLast = j.filter(String).length + 1;

  var ids = ss.getRange("A2:A"+i).getValues(); // gets the list of folderIDs
  Logger.log(i + "     " + bLast);

  var currFolder;
  var children;
  var childFolders;
  var folderInfo;

  for (var x = 0; x < ids.length-1; x++){

    Logger.log("Length: " + ids.length);

    children = DriveApp.getFolderById(ids[x][0]);
    childFolders = children.getFolders(); //get the children of the main folders

    while(childFolders.hasNext()){
      currFolder = childFolders.next(); // subfolder information

      Logger.log(bLast);

      folderInfo = [[currFolder.getId(), currFolder.getName(), currFolder.getOwner().getEmail(), currFolder.getDateCreated(), currFolder.getUrl()]];
      ss.getRange("B" + bLast + ":F" + bLast).setValues(folderInfo);
      bLast++;
    }
  }
  ss.appendRow(["","//"]);
}

Я поставил команду ss.appendRow(["//"]), чтобы создать разделитель между выполнениями кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...