搜索Google Drive与共享云端硬盘时如何正确获取数组长度并兼容空值
问题修复方案
根因说明
共享云端硬盘存储的文件夹不会返回owners字段,直接读取childFolder.owners[0].emailAddress会触发空属性读取报错。除此之外,parents、lastModifyingUser、sharingUser等字段也存在为空的可能,需要统一做容错处理,同时原代码还存在几个隐藏bug会导致结果异常。
修复点说明
- 对所有嵌套属性加非空判断,属性不存在时默认返回空字符串
- 修正
Drive.Files.list的fields参数拼写错误,同时补充所有需要读取的字段声明,否则Google Drive API不会返回对应字段 - 修正分页逻辑,避免超过500条结果时遗漏数据
- 将新建表格逻辑移到循环外,避免多次重复建表
修复后完整代码
var folderName2 = "你的搜索关键词"; // 替换为实际要搜索的文件夹名称 var rows = []; var pageToken; // 新建表格逻辑移到循环外,只创建一次 var newSheet = SpreadsheetApp.create(folderName2); var newSheet1 = newSheet.getSheetByName('Sheet1'); newSheet1.getRange('A2:L2').setValues([['Parent ID', 'File Name', 'File ID', 'File URL', "MimeType: File Type", 'Owner', 'Creation Date', 'Last Modified Date', 'Last Modified User', 'Last Modified User Email Address', 'Shared DriveId', 'Sharing User EmailAddress']]); do { var queryFolder1 = 'title contains "' + folderName2 + '" and trashed = false and mimeType = "application/vnd.google-apps.folder"'; var driveFolders = Drive.Files.list({ q: queryFolder1, maxResults: 500, pageToken: pageToken, orderBy: 'title', // 修正fields参数,明确声明所有需要返回的字段 fields: 'items(id,title,alternateLink,mimeType,owners(emailAddress),createdDate,modifiedDate,lastModifyingUserName,lastModifyingUser(emailAddress),driveId,sharingUser(emailAddress),parents(id)),nextPageToken', includeItemsFromAllDrives: true, supportsAllDrives: true }); var driveFolder = driveFolders.items; if (driveFolder) { for (var x = 0; x < driveFolder.length; x++) { var childFolder = driveFolder[x]; // 每个字段都加非空判断,不存在则返回空字符串 var parentId = childFolder.parents && childFolder.parents.length > 0 ? childFolder.parents[0].id : ''; var ownerEmail = childFolder.owners && childFolder.owners.length > 0 ? childFolder.owners[0].emailAddress : ''; var lastModifyUserEmail = childFolder.lastModifyingUser ? childFolder.lastModifyingUser.emailAddress : ''; var sharingUserEmail = childFolder.sharingUser ? childFolder.sharingUser.emailAddress : ''; rows.push([ parentId, childFolder.title, childFolder.id, childFolder.alternateLink, childFolder.mimeType, ownerEmail, childFolder.createdDate, childFolder.modifiedDate, childFolder.lastModifyingUserName || '', lastModifyUserEmail, childFolder.driveId || '', sharingUserEmail ]); } } // 赋值下一页的pageToken,实现翻页 pageToken = driveFolders.nextPageToken; } while (pageToken); // 所有数据收集完成后一次性写入表格 if (rows.length > 0) { newSheet1.getRange(3, 1, rows.length, rows[0].length).setValues(rows); }
额外说明
如果你的表头里的Parent URL需要父文件夹的访问链接,可以将parentId拼接为https://drive.google.com/drive/folders/ + parentId 即可。
内容的提问来源于stack exchange,提问作者user7935276
相关产品推荐
相关产品推荐

