使用GAS将 "工作表 "上列出的 "查看器 "和 "编辑 "添加到共享驱动器的文件夹和文件中。

问题描述 投票:0回答:1

我有一个文件夹和文件列表,需要与共享驱动器中的不同用户(作为查看者和编辑者)共享。当我复制这些文件夹和文件时,它没有复制用户。

我有一个表,下面有以下信息。在将文件夹及其内容复制到 Shared Drive 之前,我拉出了查看器和编辑器。我的目标是运行代码,分别拉出共享驱动器中的新文件夹或文件Id以及查看器和编辑器。

复制到共享驱动器之前的信息,以获得查看器和编辑器。路径,名称,文件夹ID,用户访问权限,所有者,查看者,编辑者,文件夹文件日期。

复制到共享驱动器后的信息。路径、名称、文件夹ID、用户访问、查看者、编辑、文件夹文件日期。

我在过去使用过这段代码,对于MyDrive文件夹共享(共享给<3人)工作得很好,但当我试图对共享驱动器文件夹文件做同样的工作时,它似乎并不工作。是否有一个简单的方法来添加这些用户,并默默地共享文件夹和文件?

 function setPermissions(){
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('sheetname');
  var start = 2;
  var last = sheet.getLastRow();
  var sheetValues = ssFilesSheet.getRange(start,1,last,ssFilesSheet.getLastColumn()).getValues();

  for (var i = 0; i < sheetValues.length; i++) {
    var row = sheetValues[i];   
    var id = row[0];
    var reader = row[3];
    var writer = row[4];

    var roles = {
  writer: [writer],
  reader: [reader]      
};

for(var key in roles) {
  var role = roles[key];
  role.forEach(function (email) {
    var resource = {
      role: key,
      type: "user",
      value: email
    }
    if(key == "commenter") {
      resource.role = "reader";
      resource.additionalRoles = ["writer"]
    }        
    Drive.Permissions.insert(resource, 
                             id, 
                             {sendNotificationEmails: false, 
                              // supportsTeamDrives:true,
                              supportsAllDrives: true, 
                              // useDomainAdminAccess:false });
                             });

  }
}

非常感谢您的时间和帮助

google-apps-script google-sheets google-drive-api google-drive-team-drive
1个回答
1
投票
  • 要设置用户为 writerreader 的文件,目前你需要将请求参数设置为 supportsAllDrivestrue,所以在应用程序脚本中。
Drive.Permissions.insert(
        {
          'role': 'owner',
          'type': 'user',
          'value': 'user email'
        },
        folder/fileid,
        {
          'sendNotificationEmails': 'false',
          'supportsAllDrives' : `true`
        });
  • 设置用户为 owner 的共享驱动器上的文件通过Drive API目前还无法实现。一直以来都有这方面的功能请求,因此 Google 很可能会在未来加入这项功能。

更新

根据您更新的代码,如果您想提取位于同一单元格中的多个电子邮件地址,您需要将它们作为一个字符串检索,并将它们转换为一个数组,例如,使用 split().

样品。

 for (var i = 0; i < sheetValues.length; i++) {

    var row = sheetValues[i];   
    var id = row[0];
    var reader = row[1];
    var writer = row[2];

    var roles = {
      writer: writer,
      reader: reader
    };

    for(var key in roles) {
      var role = roles[key];
      var roleArray = role.split(", ");
      roleArray.forEach(function (email) {
        if(email !="" && email !=" "){
          var resource = {
            role: key,
            type: "user",
            value: email
          }
          if(key == "commenter") {
            resource.role = "reader";
            resource.additionalRoles = ["writer"]
          }        
          Logger.log("value: " + email);
          //Customize parameters sendNotificationEmails:false,supportsTeamDrives:true,useDomainAdminAccess:false
          Drive.Permissions.insert(resource, 
                                   id, 
                                   {sendNotificationEmails: false, 
                                    // supportsTeamDrives:true,
                                    supportsAllDrives: true, 
                                    // useDomainAdminAccess:false });
                                   });
        }
      })
    };

  }
  ssFilesSheet.getRange(i+2,6).setValue('Added User Permissions');
© www.soinside.com 2019 - 2024. All rights reserved.