如何将 csv 数据的动态驱动器访问权限分配给 google 驱动器文件夹?

How to allot dynamic drive access permission from csv data to google drive folders?

我有一个 csv filefirst nameID numberemail id 一组特定人群的数据。我想获取这些信息,并在 Google Drive 父文件夹中创建名称为 firstname_ID_number 的子文件夹,并将每个文件夹的访问权限设置为仅对应的电子邮件。

换句话说,列表中的每个人都只能访问该驱动器中自己的文件夹,而不能访问其他人的文件夹。

我的第一个想法是使用 Google ColabGoogle Drive API 来完成这项工作。但我不知道如何或从哪里开始。非常感谢您的指导。

您可以首先在 Google 表格中导入您的 csv 文件,然后使用 Apps 脚本完成您的任务。

因此,假设您的 sheet 最终看起来与此类似:

First Name ID Number Email ID
Name1 N1 E1
Name2 N2 E2
Name3 N3 E3

您可以使用 Drive 高级服务来创建文件夹和分配权限。您可以查看以下脚本以实现此目的:

代码

function mainFunction() {
  let spreadsheet = SpreadsheetApp.openById("SPREADSHEET_ID");
  let sheet = spreadsheet.getSheetByName("SHEET_NAME");
  let nameCol = sheet.getRange(START_ROW, START_COL, NO_ROWS, NO_COLS).getValues();
  let idCol = sheet.getRange(START_ROW, START_COL, NO_ROWS, NO_COLS).getValues();
  let emailCol = sheet.getRange(START_ROW, START_COL, NO_ROWS, NO_COLS).getValues();

  for (let i = 0; i < nameCol.length; i++) {
    let fileName = nameCol[i + 1][0] + "_" + idCol[i + 1][0];
    let folderId = createFolder(fileName);
    createPermission(emailCol[i + 1][0], folderId);
  }
}

function createFolder(fileName) {
  let optionalArgs = { supportsAllDrives: true };
  let resource = {
    title: fileName,
    mimeType: 'application/vnd.google-apps.folder',
    parents: [{
      "id": "SHARED_DRIVE_ID"
    }]
  }
  let folder = Drive.Files.insert(resource, null, optionalArgs);
  return folder.id;

}

function createPermission(emailAddress, folderId) {
  let optionalArgs = { supportsAllDrives: true };
  let resource = {
    role: "ROLE",
    type: "TYPE",
    emailAddress: emailAddress
  }
  Drive.Permissions.insert(resource, folderId);
}

说明

脚本由三个函数组成:mainFunctioncreateFoldercreatePermissionmainFunction 用于从 sheet 收集所有值,而 createFoldercreatePermission 用于创建文件夹并为其分配必要的权限。由于您使用的是共享驱动器,因此此处正确的方法是使用 Drive 高级服务。

参考