【问题标题】:Google Drive Api V3 - retreive all folders and files with it's childrens as treeviewGoogle Drive Api V3 - 检索所有文件夹和文件及其子项作为树视图
【发布时间】:2021-03-02 16:08:07
【问题描述】:

有没有办法使用 Google API v3 客户端一次性从 google drive 及其子文件夹或子文件夹中检索文件夹和文件?下面是我现在用来检索的代码,我只获取第一层数据。请任何人告诉我这个。如果满足我的要求,我很感激。 谢谢你。

【问题讨论】:

标签: javascript node.js angular typescript google-apps-script


【解决方案1】:

如果要检索所有文件,则必须使用Files:list 方法。但是,每页可以返回的最大结果数为 1000。

为了检索所有其他剩余文件,您必须使用nextPageToken 参数。

根据Drive API v3 documentation:

nextPageToken > 下一页文件的页面标记。如果到达文件列表的末尾,这将不存在。如果令牌因任何原因被拒绝,则应将其丢弃,并应从结果的第一页重新开始分页。

此外,根据您传递给请求的确切 corpora 参数,incompleteSearch 参数可能也会有所帮助。

参考

【讨论】:

  • 真的很有用。它真的对我有帮助。感谢您的指导。
【解决方案2】:

这是我在 v8 之前编写的一个真正的旧脚本:

这里的内容可能不是脚本的一部分,但我已经包含了所有内容。

代码.gs:

var GStorage = '';
var folderID = "Storage Folder Id"
var GFlag = 0;
function onOpen()
{
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My Tools')
            .addItem('My Drive Directory Listing','runtraverseFolder')
            .addItem('Clear Dirlist','clearDirlist')
            .addToUi();
}

function runtraverseFolder()
{
  var dirlist = loadDirlist();
  var html1 = '<html><head></head><body><div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
  <input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" /></div><br />';
  var html2 = '</div><div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" />\
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" />\
  <br /></body></html>';
  if(dirlist)
  {
    dispStatus('Stored MyDrive Directory List', html1 + GStorage + html2, 800, 600);
  }
  else
  {
    GStorage ='<style>\
    .tab0{margin-left:0px;font-weight:750;}\
    .tab1{margin-left:50px;font-weight:750;}\
    .tab2{margin-left:100px;font-weight:750;}\
    .tab3{margin-left:150px;font-weight:750;}\
    .tab4{margin-left:200px;font-weight:750;}\
    .tab5{margin-left:250px;font-weight:750;}\
    .tab6{margin-left:300px;font-weight:750;}\
    .file{color:#d81840;}\
    .contrls{padding:10px 10px 10px 10px;}\
    .timestmp {width: 200px;margin-left:5px;padding:10px 0px 5px 50px;background-color:rgba(121, 25, 0, 0.36);color:white;}</style>';
    GFlag = 0;
    traverseFolder(DriveApp.getRootFolder());
    saveDirlist();
    dispStatus('Current MyDrive Directory Listing', html1 + GStorage + html2, 1000, 600);
    
  }
}

function traverseFolder(folderObj) 
{
  GStorage += '<p class="tab' + GFlag++ + '">' +  folderObj.getName() +  ', <span style="color:black;font-size:8px;"><a href="https://drive.google.com/open?id='+ folderObj.getId() +'" target="_blank" >&nbsp;Open</a></span></p>';
  var subs = folderObj.getFolders();
  var files =  folderObj.getFiles();
  if(files)
  {
    while(files.hasNext())
    {
      var fi = files.next();;
      GStorage += '<p class="tab' + GFlag + ' file">' + fi.getName()  + ', <span style="color:black;font-size:8px;"><a href="https://drive.google.com/open?id='+ fi.getId() +'" target="_blank" >&nbsp;Open</a></span></p>';
    }
  }
  while (subs.hasNext()) 
  {
    traverseFolder(subs.next());
  }
  GFlag--;
}

function saveDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID);
  var fldrname = fldr.getName();
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  var timeStamp = '<div class="timestmp">' + Utilities.formatDate(new Date(), "GMT-7", "yyyy-MM-dd HH:mm:ss") + '</div>';
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      fi.setContent(timeStamp + GStorage);
      SpreadsheetApp.getUi().alert('Directory Listing was updated using: ' + target);    }
  }
  if(!targetFound)
  {
    var created = fldr.createFile('CurrentDirectoryListing',timeStamp + GStorage);
    if(created)
    {
      SpreadsheetApp.getUi().alert( 'Directory Listing was stored here: ' + fldr.getName() + '/' + created.getName());
    }
    else
    {
      SpreadsheetApp.getUi().alert('Unknown Error: Directory List was not stored');
    }
  }
}

function loadDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID);
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      GStorage = fi.getBlob().getDataAsString();
      //SpreadsheetApp.getUi().alert('Directory Listing was retreived from: ' + fldr.getName() + '/' + target);
    }
  }
  return targetFound;
}

function clearDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID)
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      fldr.removeFile(fi);
      SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
    }
  }
  return targetFound;
}

Utility.gs:

function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 250;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
 SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
} 

function getTriggers()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var triggers = ScriptApp.getUserTriggers(ss);
  var title = "All My Current Triggers";
  var msg = '';
  if(triggers)
  {
    for(var i = 0; i < triggers.length; i++)
    {
      msg+= 'Triggers[' + i + '] = ' + '<br />';
      msg+='EventType = ' + triggers[i].getEventType() + '<br />HandlerFunction = ' + triggers[i].getHandlerFunction() + '<br />TriggerSource = '  + triggers[i].getTriggerSource() + '<br />TriggerSourceID = ' + triggers[i].getTriggerSourceId() + '<br />TriggerUniqueId = ' + triggers[i].getUniqueId() +'<br /><br />';
    }
    dispStatus(title,msg,800,500);
  }
  else
  {
    dispStatus('All My Current Trigger','No Trigger',800,500);
  }
}

test.gs:(不确定是否使用过)

function test()
{
  var prompt ='';
  if(prompt)
  {
    var S = SpreadsheetApp.getUi().prompt('7 comma separated values A[0] = A[1] , A[2] , A[3] && A[4] == A[5]  A[6] is stop 1,1,1,1,1,1,1');
  }
  else
  {
    var S = SpreadsheetApp.getUi().prompt('7 comma separated values A[0] = A[1] , A[2] , A[3] && A[4] == A[5] 1,1,1,1,1,1,1');
  }
    
  var A = S.getResponseText().split(',');
  
  if(A[0] = A[1] , A[2] , A[3] && A[4] == A[5])
  {
    SpreadsheetApp.getUi().alert('It\'s true.');
  }
  else
  {
    SpreadsheetApp.getUi().alert('It\'s false.');
  }
  if(A[6]==1)
  {
    test();
  }
  else
  {
    return;
  }
}

function test1()
{
  //(editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3 && sheet.getName() == sheetToSort)
  //var title = 'Evaluate (i==j, k, l && m==n) = result';
  var title = 'Evaluate (i==j, k, l) = result';
  var msg='';
  for(var i=0;i<5;i++)
  {
    var j=0;
    {
      var k=1;
      {
        var l=2;
        {
          var m=0;
          {
            var n=0;
            {
              if(n==j, k, l )
              {
                result='<span style="color:red;">true</span>';
              }
              else
              {
                result='<span style="color:black;">false</span>';
              }
              //msg += '( ' + i + ' == ' + j + ', ' + k + ', ' + l + ' && ' + m + ' == ' + n + ' ) = ' + result +'<br />';
              msg += '( ' + i + ' == ' + j + ', ' + k + ', ' + l + ' ) = ' + result +'<br />';
            }
          }
        }
      }
    }
  }
  dispStatus(title,msg,600,500);
}

function do_onEdit(e) 
{
  dispStatus('Do On Edit', 'At the beginning of do_onEdit',400,200);
  var sheetToSort = "Sheet2"; // name of sheet to be sorted
  var columnToCheck1 = 2; // column to check for edits
  var columnToCheck2 = 3; // second column to be checked for edits
  var columnToCheck3 = 6;
  var columnToCheck4 = 10;
  var columnToCheck5 = 11;
  var columnToCheck6 = 12;
  var columnToCheck7 = 13;
  var columnToCheck8 = 14;
  var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
  var rangeToSort = "A1:P150"; // range of values to be sorted

  var sheet = SpreadsheetApp.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort) 
  {
    SpreadsheetApp.getUi().alert("I'm busy sorting don't bother me.");
  }
}


function addNew_onEdit_Trigger()
{
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('do_onEdit')
   .forSpreadsheet(sheet)
   .onEdit()
   .create();
}

function timer_test()
{
  dispStatus('Loading.....','<script>var myVar = setInterval(myTimer ,5000);function myTimer() { google.script.host.close();}</script>',200,100);
}

function associativeArrayTesting()
{
  var myA = {'man':'boy','woman':'girl','horse':'pony','hard':'gentle'};
  var result = SpreadsheetApp.getUi().prompt('Enter a sentence using man, woman and horse.');
  var test = result.getResponseText();
  test = test.replace(/[\.]/,'');
  var wordsA = test.split(' ');
  for(var i = 0;i<wordsA.length;i++)
  {
    var key = wordsA[i];
    var value = myA[key];
    if(myA[key])
    {
      wordsA[i]=myA[wordsA[i]];
    }
  }
  dispStatus('My Word', wordsA.join(' '));
}

function SortQuestion(event)
{
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  var ecol = editedCell.getColumn();

  var tableRange = "C16:84";
  var range = sheet.getRange(tableRange);

  range.sort([function(x, y) {
    cx = x[5];
    cy = y[5];
    return (cx != "" && cy != "") || (cx == "" && cy == "") ? 0 : (cx == "" ? -1 : 1);
  }, {column: 4, ascending: false}]);
}function test()
{
  var prompt ='';
  if(prompt)
  {
    var S = SpreadsheetApp.getUi().prompt('7 comma separated values A[0] = A[1] , A[2] , A[3] && A[4] == A[5]  A[6] is stop 1,1,1,1,1,1,1');
  }
  else
  {
    var S = SpreadsheetApp.getUi().prompt('7 comma separated values A[0] = A[1] , A[2] , A[3] && A[4] == A[5] 1,1,1,1,1,1,1');
  }
    
  var A = S.getResponseText().split(',');
  
  if(A[0] = A[1] , A[2] , A[3] && A[4] == A[5])
  {
    SpreadsheetApp.getUi().alert('It\'s true.');
  }
  else
  {
    SpreadsheetApp.getUi().alert('It\'s false.');
  }
  if(A[6]==1)
  {
    test();
  }
  else
  {
    return;
  }
}

function test1()
{
  //(editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3 && sheet.getName() == sheetToSort)
  //var title = 'Evaluate (i==j, k, l && m==n) = result';
  var title = 'Evaluate (i==j, k, l) = result';
  var msg='';
  for(var i=0;i<5;i++)
  {
    var j=0;
    {
      var k=1;
      {
        var l=2;
        {
          var m=0;
          {
            var n=0;
            {
              if(n==j, k, l )
              {
                result='<span style="color:red;">true</span>';
              }
              else
              {
                result='<span style="color:black;">false</span>';
              }
              //msg += '( ' + i + ' == ' + j + ', ' + k + ', ' + l + ' && ' + m + ' == ' + n + ' ) = ' + result +'<br />';
              msg += '( ' + i + ' == ' + j + ', ' + k + ', ' + l + ' ) = ' + result +'<br />';
            }
          }
        }
      }
    }
  }
  dispStatus(title,msg,600,500);
}

function do_onEdit(e) 
{
  dispStatus('Do On Edit', 'At the beginning of do_onEdit',400,200);
  var sheetToSort = "Sheet2"; // name of sheet to be sorted
  var columnToCheck1 = 2; // column to check for edits
  var columnToCheck2 = 3; // second column to be checked for edits
  var columnToCheck3 = 6;
  var columnToCheck4 = 10;
  var columnToCheck5 = 11;
  var columnToCheck6 = 12;
  var columnToCheck7 = 13;
  var columnToCheck8 = 14;
  var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
  var rangeToSort = "A1:P150"; // range of values to be sorted

  var sheet = SpreadsheetApp.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort) 
  {
    SpreadsheetApp.getUi().alert("I'm busy sorting don't bother me.");
  }
}


function addNew_onEdit_Trigger()
{
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('do_onEdit')
   .forSpreadsheet(sheet)
   .onEdit()
   .create();
}

function timer_test()
{
  dispStatus('Loading.....','<script>var myVar = setInterval(myTimer ,5000);function myTimer() { google.script.host.close();}</script>',200,100);
}

function associativeArrayTesting()
{
  var myA = {'man':'boy','woman':'girl','horse':'pony','hard':'gentle'};
  var result = SpreadsheetApp.getUi().prompt('Enter a sentence using man, woman and horse.');
  var test = result.getResponseText();
  test = test.replace(/[\.]/,'');
  var wordsA = test.split(' ');
  for(var i = 0;i<wordsA.length;i++)
  {
    var key = wordsA[i];
    var value = myA[key];
    if(myA[key])
    {
      wordsA[i]=myA[wordsA[i]];
    }
  }
  dispStatus('My Word', wordsA.join(' '));
}

function SortQuestion(event)
{
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  var ecol = editedCell.getColumn();

  var tableRange = "C16:84";
  var range = sheet.getRange(tableRange);

  range.sort([function(x, y) {
    cx = x[5];
    cy = y[5];
    return (cx != "" && cy != "") || (cx == "" && cy == "") ? 0 : (cx == "" ? -1 : 1);
  }, {column: 4, ascending: false}]);
}

我在文件中存储了一些片段,因为运行此脚本需要很长时间,所以每次我决定存储我认为如果我正在寻找旧的信息时可能有用的信息,而不是花时间遍历所有文件东西。实际上,我从不使用脚本。你可以就它提出问题,但我不保证回答它们,因为我已经很久没有看过它了。它在 Rhino 中运行,但我尚未在 v8 中对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多