尝试创建Google驱动器文件夹的树状视图

时间:2019-05-31 19:43:40

标签: google-apps-script directory tree

我是在Google表格中使用脚本的初学者,我正在尝试在Google驱动器中创建包含许多子文件夹的文件夹列表。理想情况下,它将是树形形式,但此时我要准备一份清单。我不需要列出所有文件,只需列出文件夹。我一直在尝试使下面的代码正常工作,但是它一直挂在调用电子表格上。有人可以帮忙吗?

我曾尝试通过名称和ID来调用文件夹和电子表格,但是它总是告诉我它无法执行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秒]

2 个答案:

答案 0 :(得分:2)

或者..简单的方法...

在PC的台式机上使用DRIVE或FS DRIVE APP。使用CMD(窗口)...和功能

树> a.txt

生成的文件a.txt将显示所有树。

它可以节省大量的研究时间。

答案 1 :(得分:0)

SpreadsheetApp.getActiveSpreadsheet()没有任何参数。

但是

SpreadsheetApp.openById('ssid')确实需要和id。我认为您可能打算使用openById();

openById

getActiveSpreadsheet

这是我目前正在使用的脚本,但它会生成电子表格列表,您可以按ID排除文件夹,按ID排除文件。

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;
  }
}

欢迎您使用它,也许会有所帮助。