【问题标题】:How to correctly retrieve the array length when searching both Drive and Shared Drives?搜索驱动器和共享驱动器时如何正确检索数组长度?
【发布时间】:2021-08-27 02:17:24
【问题描述】:

我有一个场景,我在 Google 云端硬盘和共享云端硬盘中搜索文件夹。我有以下参数 - 标题包含“文件夹名称”,trashed = false 和 mimeType =“application/vnd.google-apps.folder”

我将其设置为创建一个新工作表来保存结果。我认为其中一个“文件夹”保存在共享驱动器中,因此我会收到以下错误消息:Cannot read property 'length' of undefined.

如果“childFolder.owners[0].emailAddress”不适用(如果文件夹位于共享驱动器中),我该如何编写代码并将此字段设为空白并继续发布数组长度?我的代码停在 childFolder.owners[0].emailAddress。

抱歉,这是我第一次尝试使用云端硬盘 API 进行搜索 - 云端硬盘和共享云端硬盘。我希望我的问题是有道理的,如果不是我的道歉。

非常感谢任何输入。

这是我的部分代码:

do {
    var rows = [];
    var pageToken;
    var count = 0;

    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',
      field: 'parents:[id]',
      includeItemsFromAllDrives: true,
      supportsAllDrives: true
    });

    /* Create new sheet to save the output */
    var newSheet = SpreadsheetApp.create(folderName2);
    var newSheetID = newSheet.getId();
    var newSheet1 = newSheet.getSheetByName('Sheet1');
    newSheet1.getRange('A2:L2').setValues([['Parent URL', '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']]);

    /* Gather data */
    var driveFolder = driveFolders.items;
    if (driveFolder) {
      for (var x = 0; x < driveFolder.length; x++) {
        var childFolder = driveFolder[x];

        rows.push([childFolder.parents[0].id, childFolder.title, childFolder.id, childFolder.alternateLink, childFolder.mimeType, childFolder.owners[0].emailAddress, childFolder.createdDate, childFolder.modifiedDate, childFolder.lastModifyingUserName, childFolder.lastModifyingUser.emailAddress, childFolder.driveId, childFolder.sharingUser.emailAddress]);
      }
      newSheet1.getRange(3, 1, rows.length, rows[0].length).setValues(rows);
}

【问题讨论】:

    标签: google-apps-script google-drive-api


    【解决方案1】:

    您正在尝试访问不存在的属性。

    childFolder.sharingUser.emailAddress 将抛出 TypeError,因为 childFolder.sharingUser 不存在。

    您可以在尝试调用它之前检查它是否存在。例如:

    考虑这部分代码,

    if (driveFolder) {
        for (var x = 0; x < driveFolder.length; x++) {
          var childFolder = driveFolder[x];
          var sharingUser = getSharingUser(childFolder);
          rows.push([childFolder.parents[0].id, childFolder.title, childFolder.id, childFolder.alternateLink, childFolder.mimeType, childFolder.owners[0].emailAddress, childFolder.createdDate, childFolder.modifiedDate, childFolder.lastModifyingUserName, childFolder.lastModifyingUser.emailAddress, childFolder.driveId, sharingUser.emailAddress]);
        }
        newSheet1.getRange(3, 1, rows.length, rows[0].length).setValues(rows);
      }
    

    getSharingUser 在哪里:

    function getSharingUser(childFolder) {
      if (childFolder.sharingUser) {
        return childFolder.sharingUser
      } else return { emailAddress: "nobody" }
    }
    

    childFolder.sharingUser.emailAddress 更改为sharingUser.emailAddress

    【讨论】:

    • 您好,我尝试了您的建议,但仍然收到此错误消息:TypeError:无法读取未定义的属性“0”。它停在 childFolder.owners[0].emailAddress。如果保存在云端硬盘中的文件或文件夹存在电子邮件地址,如何显示该地址?我正在搜索云端硬盘和共享云端硬盘。
    • 你遇到的问题是childFolder所在的文件夹有一些属性未定义,程序会报错。您应该在尝试调用它们之前检查它们是否存在。或者使用try-catch 块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2020-05-13
    • 2011-07-13
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多