Google Drive:获取共享文件的用户列表
Google Drive: get the list of users with whom the file is shared
我有一些与 Google 驱动器共享的文件(Google 文档、Google Sheet),人们可以请求访问它们的权限。
例如,这里有一个 google sheet 文件的例子:https://docs.google.com/spreadsheets/d/13Wy-kLO22Y6stIzV0CjkAFVx0-EOy5hv26n8uo40xck/edit?usp=sharing
与多个用户共享,您可以申请访问权限。
然后我可以看到所有用户的列表和他们的电子邮件,我可以复制粘贴。
现在,我的问题是:如何获取 Excel 文件(当然是 Google sheet)中的所有电子邮件?
我认为可以有一个 google app script/google sheet 宏来自动化这个过程?然后的想法是获取用户名和电子邮件地址。
目前还不清楚您的意思是如何获取文件以及结果应该是什么样子。假设您有 table,其中 A 列包含文件 ID 列表。
ID
Owner
Editors
Viewers
1kO__q9CTKFeXJZYcp9oHJ0at0_Z
13ROPW5dJwnccidEQ4kYY8k4Wnif
...etc
此脚本将获取具有给定 ID 的每个文件的所有者、编辑者和查看者的电子邮件,并将这些电子邮件分别放入 B、C 和 D 列:
function get_editors_viewers() {
const sheet = SpreadsheetApp.getActiveSheet();
const ids = sheet.getRange('a2:a').getValues().flat().filter(String);
const table = [];
for (let id of ids) {
try {
var file = DriveApp.getFileById(id);
var owner = file.getOwner().getEmail();
var editors = file.getEditors().map(e => e.getEmail()).join('\n');
var viewers = file.getViewers().map(v => v.getEmail()).join('\n');
table.push([id, owner, editors, viewers]);
} catch(e) {
table.push([id, '', '', '']);
}
}
sheet.getRange(2,1,table.length,table[0].length).setValues(table);
}
结果应该是这样的:
ID
Owner
Editors
Viewers
1kO__q9CTKFeXJZYcp9oHJ0at0_Z
aaa@aaa.aaa
bbb@bbb.bbb
ccc@.ccc.ccc
1PwzEEU9CncV8N0Xh1oe5JYk_t-X
aaa@aaa.aaa
ccc@.ccc.ccc
13ROPW5dJwnccidEQ4kYY8k4Wnif
aaa@aaa.aaa
bbb@bbb.bbb
1nw5eU4-EpBWAmqy-cv2UR0OWPcS
aaa@aaa.aaa
1nQfGvAhWeXVQkI1WkCUFMRHCuVl
aaa@aaa.aaa
ccc@ccc.ccc
bbb@bbb.bbb
xxx@xxx.xxx
1jKCdKeasQR_RSNLkTZj9P1V_qTa
aaa@aaa.aaa
ccc@ccc.ccc
bbb@bbb.bbb
ccc@ccc.ccc
bbb@bbb.bbb
xxx@xxx.xxx
10404WvWgX_lanb5OMtjLYm6N9Ia
aaa@aaa.aaa
ccc@ccc.ccc
bbb@bbb.bbb
如果您有 URL 而不是 ID,您只需更改
var file = DriveApp.getFileById(id);
和
var file = DriveApp.getFileByUrl(id);
.
我有一些与 Google 驱动器共享的文件(Google 文档、Google Sheet),人们可以请求访问它们的权限。
例如,这里有一个 google sheet 文件的例子:https://docs.google.com/spreadsheets/d/13Wy-kLO22Y6stIzV0CjkAFVx0-EOy5hv26n8uo40xck/edit?usp=sharing
与多个用户共享,您可以申请访问权限。
然后我可以看到所有用户的列表和他们的电子邮件,我可以复制粘贴。
现在,我的问题是:如何获取 Excel 文件(当然是 Google sheet)中的所有电子邮件?
我认为可以有一个 google app script/google sheet 宏来自动化这个过程?然后的想法是获取用户名和电子邮件地址。
目前还不清楚您的意思是如何获取文件以及结果应该是什么样子。假设您有 table,其中 A 列包含文件 ID 列表。
ID | Owner | Editors | Viewers |
---|---|---|---|
1kO__q9CTKFeXJZYcp9oHJ0at0_Z | |||
13ROPW5dJwnccidEQ4kYY8k4Wnif | |||
...etc |
此脚本将获取具有给定 ID 的每个文件的所有者、编辑者和查看者的电子邮件,并将这些电子邮件分别放入 B、C 和 D 列:
function get_editors_viewers() {
const sheet = SpreadsheetApp.getActiveSheet();
const ids = sheet.getRange('a2:a').getValues().flat().filter(String);
const table = [];
for (let id of ids) {
try {
var file = DriveApp.getFileById(id);
var owner = file.getOwner().getEmail();
var editors = file.getEditors().map(e => e.getEmail()).join('\n');
var viewers = file.getViewers().map(v => v.getEmail()).join('\n');
table.push([id, owner, editors, viewers]);
} catch(e) {
table.push([id, '', '', '']);
}
}
sheet.getRange(2,1,table.length,table[0].length).setValues(table);
}
结果应该是这样的:
ID | Owner | Editors | Viewers |
---|---|---|---|
1kO__q9CTKFeXJZYcp9oHJ0at0_Z | aaa@aaa.aaa | bbb@bbb.bbb | ccc@.ccc.ccc |
1PwzEEU9CncV8N0Xh1oe5JYk_t-X | aaa@aaa.aaa | ccc@.ccc.ccc | |
13ROPW5dJwnccidEQ4kYY8k4Wnif | aaa@aaa.aaa | bbb@bbb.bbb | |
1nw5eU4-EpBWAmqy-cv2UR0OWPcS | aaa@aaa.aaa | ||
1nQfGvAhWeXVQkI1WkCUFMRHCuVl | aaa@aaa.aaa | ccc@ccc.ccc bbb@bbb.bbb xxx@xxx.xxx |
|
1jKCdKeasQR_RSNLkTZj9P1V_qTa | aaa@aaa.aaa | ccc@ccc.ccc bbb@bbb.bbb |
ccc@ccc.ccc bbb@bbb.bbb xxx@xxx.xxx |
10404WvWgX_lanb5OMtjLYm6N9Ia | aaa@aaa.aaa | ccc@ccc.ccc bbb@bbb.bbb |
如果您有 URL 而不是 ID,您只需更改
var file = DriveApp.getFileById(id);
和
var file = DriveApp.getFileByUrl(id);
.