Google apps script 谷歌脚本驱动应用程序帮助

Google apps script 谷歌脚本驱动应用程序帮助,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我一直在使用这个脚本,通过显示空文件夹并删除它们,帮助我在Google drive上查找和管理文件夹 我试图用DriveApp.getFolderById('folderID')修改它,以通过ID指定起始文件夹,但我不断得到错误 这是原始代码的一部分: function getEmptyFolders() { // Get sheet var sheet = SpreadsheetApp.getActive().getSheetByName('Manage Empty Fo

我一直在使用这个脚本,通过显示空文件夹并删除它们,帮助我在Google drive上查找和管理文件夹

我试图用DriveApp.getFolderById('folderID')修改它,以通过ID指定起始文件夹,但我不断得到错误

这是原始代码的一部分:

  function getEmptyFolders() {

    // Get sheet
    var sheet = SpreadsheetApp.getActive().getSheetByName('Manage Empty Folders')
    if (!sheet) {
        SpreadsheetApp.getActive().insertSheet('Manage Empty Folders')
    }

    var sheet = SpreadsheetApp.getActive().getSheetByName('Manage Empty Folders')
    var clearContent = sheet.clear()

    var folders = DriveApp.getFolders();

    var fileArray = [
        ["Folder Name", "Folder Id", "Folder URL"]
    ]
    while (folders.hasNext()) {

        var folder = folders.next()

        // If the folder has no files or child folder in it, call them out.
        if (folder.getFiles().hasNext() == false && folder.getFolders().hasNext() == false) {

            var name = folder.getName()
            var id = folder.getId()
            var url = folder.getUrl()

            // Push empty folder details into array
            fileArray.push([name, id, url])


        }

    }

    // formatting 
    var headerRow1 = sheet.getRange("A1:C1").setBackground("#d9d9d9").setFontColor("#000000").setFontWeight("Bold")
    sheet.setColumnWidths(1, 4, 300)

    // write results to the sheet
    sheet.getRange(1, 1, fileArray.length, 3).setValues(fileArray)

}
这很好,但当我尝试改变时

var folders=DriveApp.getFolders()

var folders=DriveApp.getFolderByID('folderID')

我得到一个错误:

TypeError:folders.hasNext不是函数

我对谷歌脚本很陌生,我认为我已经理解了文档,但显然不是

发行
  • 这是因为返回类型为的对象,并且正如错误所示,没有方法
    hasNext
    ,您也可以在附加的链接中看到

  • 另一方面,返回类型为的对象,该对象实际上是文件夹对象的集合,因此需要
    hasNext()
    来迭代这些文件夹

尽管您可以获取文件夹并遍历所有子文件夹:

var main_folder = DriveApp.getFolderByID('folderID'); 
var folders = main_folder.getFolders(); 
解决方案: 如果要使用
getFolderById
,则应删除
while
循环。由于您有一个单个文件夹,因此不需要迭代,事实上这样做是错误的:

function getEmptyFolders() {
    // Get sheet
    var sheet = SpreadsheetApp.getActive().getSheetByName('Manage Empty Folders')
    if (!sheet) {
        SpreadsheetApp.getActive().insertSheet('Manage Empty Folders')
    }
    var sheet = SpreadsheetApp.getActive().getSheetByName('Manage Empty Folders')
    var clearContent = sheet.clear()
    // get the parent folder by its id
    var main_folder = DriveApp.getFolderById('folderID'); // new code
    // get all subfolders
    var folders = main_folder.getFolders(); // new code


    var fileArray = [
        ["Folder Name", "Folder Id", "Folder URL"]
    ]
    while (folders.hasNext()) {

        var folder = folders.next()

        // If the folder has no files or child folder in it, call them out.
        if (folder.getFiles().hasNext() == false && folder.getFolders().hasNext() == false) {

            var name = folder.getName()
            var id = folder.getId()
            var url = folder.getUrl()

            // Push empty folder details into array
            fileArray.push([name, id, url])
        }
    }
    // formatting 
    var headerRow1 = sheet.getRange("A1:C1").setBackground("#d9d9d9").setFontColor("#000000").setFontWeight("Bold")
    sheet.setColumnWidths(1, 4, 300)
    // write results to the sheet
    sheet.getRange(1, 1, fileArray.length, 3).setValues(fileArray)
}

好吧,这很有效,但我想我可能没有很好地解释我自己。我想使用folderID作为“根”,并递归地进入其中查找空文件夹。这只是告诉我指定的folderID不是空的-我需要知道所有子目录。@Briggott我更新了我的答案。让我知道它是否对你有用。