はじめに
GASでGoogle Driveの共有ドライブにあるファイル(ドキュメントやスプレッドシート)の編集者を取得しようとしたところ、一部しか取得できなかったため、解決策を記事として残します。
共有ドライブにあるファイルの編集者権限
Google Driveの共有ドライブにあるファイル(ドキュメントやスプレッドシート)の編集者権限を付与する方法は3つあります。
- 共有ドライブの管理者:共有ドライブのメンバー管理で管理者権限を付与する
- 共有ドライブのコンテンツ管理者:共有ドライブのメンバー管理でコンテンツ管理者権限を付与する
- ファイルの編集者:共有ドライブにあるファイル(ドキュメントやスプレッドシート)の共有で編集者権限を付与する
共有ドライブにあるファイルの編集者を取得する
ファイル(スプレッドシート)に紐づくスクリプトを以下のように記述しました。
function myFunction1() {
let sheet = SpreadsheetApp.getActiveSpreadsheet(); // アクティブシートを取得
let editors = sheet.getEditors(); // シートの編集者を取得
let mail = "";
editors.forEach(function(element){
mail += element.getEmail() + ",";
});
console.log(mail);
}
上記のスクリプトで「1. 共有ドライブの管理者」と「3. ファイルの編集者」を取得できました。しかしながら、「2. 共有ドライブのコンテンツ管理者」は取得できませんでした。
次に以下のようなスクリプトを記述しました。
function myFunction2() {
let sheet = SpreadsheetApp.getActiveSpreadsheet(); // アクティブシートを取得
let file = DriveApp.getFileById(sheet.getId()); // ファイルを取得
let editors = file.getEditors(); // ファイルの編集者を取得
let mail = "";
editors.forEach(function(element){
mail += element.getEmail() + ",";
});
console.log(mail);
}
今度は「2. 共有ドライブのコンテンツ管理者」と「3. ファイルの編集者」を取得できましたが、
「1. 共有ドライブの管理者」は取得できませんでした。
最終的に以下のようなスクリプトにしました。
function myFunction3() {
let sheet = SpreadsheetApp.getActiveSpreadsheet(); // アクティブシートを取得
let file = DriveApp.getFileById(sheet.getId()); // ファイルを取得
let mail = "";
let editors = sheet.getEditors(); // シートの編集者を取得
editors.forEach(function(element){
mail += element.getEmail() + ",";
});
editors = file.getEditors(); // ファイルの編集者を取得
editors.forEach(function(element){
mail += element.getEmail() + ",";
});
console.log(mail);
}
「3. ファイルの編集者」は二重で取得されてしまいますが良しとしました。
最後に
無事、Google Driveの共有ドライブにあるファイルの編集者を取得できました。
ファイルの共有設定で確認してもどのように編集者権限を付与されたか区別されないので、GASで一部の編集者しか表示されない理由がわからずしばらく悩みました。