如何将 csv 数据的动态驱动器访问权限分配给 google 驱动器文件夹?
How to allot dynamic drive access permission from csv data to google drive folders?
我有一个 csv file
和 first name
、ID number
和 email id
一组特定人群的数据。我想获取这些信息,并在 Google Drive 父文件夹中创建名称为 firstname_ID_number
的子文件夹,并将每个文件夹的访问权限设置为仅对应的电子邮件。
换句话说,列表中的每个人都只能访问该驱动器中自己的文件夹,而不能访问其他人的文件夹。
我的第一个想法是使用 Google Colab
和 Google 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);
}
说明
脚本由三个函数组成:mainFunction
、createFolder
和createPermission
。 mainFunction
用于从 sheet 收集所有值,而 createFolder
和 createPermission
用于创建文件夹并为其分配必要的权限。由于您使用的是共享驱动器,因此此处正确的方法是使用 Drive
高级服务。
参考
我有一个 csv file
和 first name
、ID number
和 email id
一组特定人群的数据。我想获取这些信息,并在 Google Drive 父文件夹中创建名称为 firstname_ID_number
的子文件夹,并将每个文件夹的访问权限设置为仅对应的电子邮件。
换句话说,列表中的每个人都只能访问该驱动器中自己的文件夹,而不能访问其他人的文件夹。
我的第一个想法是使用 Google Colab
和 Google 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);
}
说明
脚本由三个函数组成:mainFunction
、createFolder
和createPermission
。 mainFunction
用于从 sheet 收集所有值,而 createFolder
和 createPermission
用于创建文件夹并为其分配必要的权限。由于您使用的是共享驱动器,因此此处正确的方法是使用 Drive
高级服务。