Попытка создать древовидную структуру папок на диске Google - PullRequest
0 голосов
/ 31 мая 2019

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

Для справки, это был код, который я использовал для начала: https://superuser.com/questions/1095578/list-of-subfolder-names-and-file-links-in-google-sheets-script

function listFolders(foldername) {
var ss = SpreadsheetApp.openById(ID);
var sheet = ss.getSheetByName("sheet name");
sheet.appendRow("Parent Folder", "Name", "Link" ]);

//change the folder ID below to reflect your folder's ID (look in the            
URL when you're in your folder)

var folders = DriveApp.getFolderById(ID);
var contents = folders.getFolders();
var cnt = 0;
var folderD;

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

data = [
        folders.getName(),
        folderD.getName(),
        folderD.getUrl(),
];


sheet.appendRow(data);
};
};

Исходное сообщение: я новичок в использовании скриптов в листах Google, и я пытаюсь создать список папок на диске Google со многими подпапками.В идеале это будет древовидная форма, но я бы остановился на списке на данный момент.Мне не нужно перечислять все файлы, только папки.Я пытался заставить приведенный ниже код работать, но он продолжает зависать при вызове электронной таблицы.Кто-нибудь может помочь?

Я пытался вызвать обе папки и электронную таблицу по имени и идентификатору, но он всегда говорит мне, что не может выполнить команду getactivespreadsheet.Я также пытался изменить код, указанный в другом другом вопросе, но я не могу заставить его работать также: https://ctrlq.org/code/19923-google-drive-files-list

function generateFolderIndex(myfoldername) {
var folder = DriveApp.getFolderById('0B8vOJQUb-IIVTHdudlZSVkdtdE0');
var subFolders = folder.getFolders();
var childFolders = subFolders
var ss = SpreadsheetApp.getActiveSpreadsheet('1Trv9OtJFnD4AdSHrZKFfsSu6JMV9f78H6wwZNhF2_M4');
var sheet = ss.getSheetByName('Directory');

sheet.clear(directory);
sheet.appendRow([name, link]);

while (subFolders.hasNext())
{    
var childFolder = childFolders.next(); 

var foldername = childFolder.getname();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()


data = [name, link]
sheet.appendRow(data);

}
};

Я пытаюсь получить лист со списком папок и подпапок сURL ссылки.В настоящее время я получаю следующее сообщение об ошибке: [19-05-31 15: 32: 20: 911 EDT] Ошибка выполнения: не удается найти метод getActiveSpreadsheet (string).(строка 5, файл «Код») [общее время выполнения 0,432 секунды]

1 Ответ

0 голосов
/ 31 мая 2019

SpreadsheetApp.getActiveSpreadsheet() не имеет параметров.

Однако

SpreadsheetApp.openById('ssid') требует и id.Я думаю, возможно, вы хотели использовать openById ();

openById

getActiveSpreadsheet

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

function getAllSpreadsheets() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('FilesAndFolders');
  if(sh.getLastRow()>0) {
    sh.getRange(1,1,sh.getLastRow(),2).clear().clearDataValidations();
  }
  getFnF();
  SpreadsheetApp.getUi().alert('Process Complete')
}

var level=0;
function getFnF(folder) {
  var folder= folder || DriveApp.getRootFolder();
  //var folder=DriveApp.getRootFolder();
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('FilesAndFolders');
  var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS)
  while(files.hasNext()) {
    var file=files.next();
    if(isExcluded(file.getId(),'file')){continue;}
    var firg=sh.getRange(sh.getLastRow() + 1,level + 1);
    firg.setValue(Utilities.formatString('=HYPERLINK("%s","%s")',file.getUrl(),'FILE: ' + file.getName()));
    firg.offset(0,1).insertCheckboxes('Exclude','Include');
  }
  var subfolders=folder.getFolders() 
  while(subfolders.hasNext()) {
    var subfolder=subfolders.next();
    if(isExcluded(subfolder.getId(),'folder')){continue;}
    var forg=sh.getRange(sh.getLastRow() + 1,level + 1);
    forg.setValue(Utilities.formatString('=HYPERLINK("%s","%s")',subfolder.getUrl(),'FOLDER: ' + subfolder.getName()));
    //forg.offset(0,1).insertCheckboxes('Exclude','Include');
    //level++;
    getFnF(subfolder);
  }
  //level--;
}

function isExcluded(id,type) {//type: file or folder
  var type=type||'Missing Input';
  var xFldrIdA=['Excluded folder ids'];
  var xFileIdA=['Excluded file ids'];
  var type=type.toLowerCase();
  switch(type) {
    case 'file':
      return xFileIdA.indexOf(id)>-1;
      break;
    case 'folder':
      return xFldrIdA.indexOf(id)>-1;
      break;
    default:
      throw(Utilities.formatString('Error: Invalid Type: %s in isExcluded.',type));
      return true;//assume excluded
      break;
  }
}

Вы можете использовать его, возможно, это поможет.

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