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);.