Google apps script 谷歌脚本驱动应用程序帮助
我一直在使用这个脚本,通过显示空文件夹并删除它们,帮助我在Google drive上查找和管理文件夹 我试图用DriveApp.getFolderById('folderID')修改它,以通过ID指定起始文件夹,但我不断得到错误 这是原始代码的一部分: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
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我更新了我的答案。让我知道它是否对你有用。