2016-05-16 77 views
0

我可能会丢失明显的东西,但我无法遍历父文件夹中包含的子文件夹。我的意图是获得其中一个子文件夹的ID。 。查找父文件夹中的子文件夹

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Create Ticket"); 
    var FileID = SpreadsheetApp.getActiveSpreadsheet().getId(); 
    var ThisFileParentFolders = DriveApp.getFileById(FileID).getParents(); 
    //loop through subfolders to find the admin folder 
    var PF = ThisFileParentFolders.next().getName(); 
    var subfolders = ThisFileParentFolders.next().getFolders(); 
Logger.log("PF=" + PF); 
    while (subfolders.hasNext()) { 
     var sfldr = subfolders.next() 
     Logger.log(sfldr.getName()) 
     findSubFolder(sfldr) 
    if (sfldr=="TempUploads") { 
     var TUploadFolder = subfolders.next().getID(); 
    } 
    } 
    Logger.log("TUploadFolder=" + TUploadFolder) 

function findSubFolder(sfldr) { 
    sfldr = sfldr.getId(); 
    var childFolder = DriveApp.getFolderById(sfldr).getFolders(); 
    while(childFolder.hasNext()) { 
    var child = childFolder.next(); 
    Logger.log(child.getName()); 
    getSubFolders(child); 
    } 
    return; 
} 

在调试期间,在 VAR子文件夹= ThisFileParentFolders.next()getFolders码符();

带有错误'无法检索下一个对象:迭代器已达到结尾。'

PF在调试器中显示正确的父文件夹,但该文件夹中肯定有子文件夹。我还没有测试findSubFolder函数,但我甚至无法达到那么远。我错过了什么?

回答

0

“var ThisFileParentFolders”将是一个“FolderIterator”对象。

A “FolderIterator” 是一种阵列可以主要经2种方法ACCES: .hasNext()和的.next()

ALWAYS当您使用的.next()方法,就得到下从这个“数组”文件夹中输入。

因此,而不是使用代码行

var subfolders = ThisFileParentFolders.next().getFolders(); 

你应该使用

var subfolders = PF.getFolders(); 

你看到了吗? 当您将返回值保存到PF变量中时,您第一次调用.next()方法。这是你的情况你的文件只有父文件夹。

然后,您尝试从此PF文件夹中获取文件夹,但不是使用PF.getFolders(),而是再次使用ThisFileParentFolders“数组”文件夹中的方法.next()元素。

因此,您的脚本必须停止。

希望,这有助于。

我不得不添加一些东西:

PF不是一个文件夹! 这是一个STRING! 所以,你必须改变

var PF = ThisFileParentFolders.next().getName(); 

var PF = ThisFileParentFolders.next(); 

摆脱PF.getFolders()

望子行,这有助于

+0

请使用反引号来分隔代码或者用四个空格缩进代码,以便突出显示。谢谢! –

+0

非常感谢理查德。我忙于结束自己的努力,正确地思考问题。 – Glib

相关问题