You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

搜索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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:57:03