▼背景
共有ドライブ(旧チームドライブ)を近く作り、その中に60個近いフォルダを生成し、各フォルダごとに違うメンバーを1人追加し、かつ、権限の設定も行う必要があります。
手動でできなくはないのですが、数が多いので自動化したいです。
▼アウトプットイメージ
スプレッドシートに作成予定の共有ドライブ、共有ドライブ内のフォルダ、追加するアドレスの一覧を作り、メンバーと権限を追加したいと考えております。
var ss = SpreadsheetApp.getActiveSpreadsheet(); var createDriveSheet = ss.getSheetByName("共有ドライブ作成"); var updateDriveMemberSheet = ss.getSheetByName("共有ドライブ権限変更"); //実行メニューを作成 function onOpen() { var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu("GAS実行"); menu.addItem("共有ドライブ作成", "createSharedDrive"); menu.addItem("共有ドライブメンバー変更", "updateDriveMember"); menu.addToUi(); } //Drive API v2を使用 function createSharedDrive() { var lastColum = createDriveSheet.getLastColumn(); var lastRow = createDriveSheet.getLastRow(); var startRow = 2; var numRows = lastRow - startRow + 1; var numColumns = lastColum ; var dataRange = createDriveSheet.getRange(startRow, 1, numRows, numColumns); var data = dataRange.getValues(); for (var i = 0; i < data.length; ++i) { var row = data[i]; row.rowNumber = i + 2; //Result列がブランクであれば処理を実行 if (!row[numColumns - 1]) { var result = ""; try { //同名の共有ドライブが作成できてしまうので、既に存在しないかチェックする。 var driveID = searchDriveIDbyName(row[0]); if(driveID=="Error") { throw "共有ドライブIDの取得でエラーが発生しました"; } else if(driveID=="Duplicate"){ throw "同じ名前の共有ドライブが複数存在します"; } else if(driveID=="Nothing") { var insertResources = { "name": row[0], }; //共有ドライブ設定の引数チェック var isAdminManagedRestrictions; var isDomainUsersOnly; var isDriveMembersOnly; var isCopyRequiresWriterPermission; if(row[1] == "true"){ isAdminManagedRestrictions = true; }else if(row[1] == "false") { isAdminManagedRestrictions = false; }else{ throw "引数の設定に誤りがあります"; } if(row[2] == "true"){ isDomainUsersOnly = true; }else if(row[2] == "false") { isDomainUsersOnly = false; }else{ throw "引数の設定に誤りがあります"; } if(row[3] == "true"){ isDriveMembersOnly = true; }else if(row[3] == "false") { isDriveMembersOnly = false; }else{ throw "引数の設定に誤りがあります"; } if(row[4] == "true"){ isCopyRequiresWriterPermission = true; }else if(row[4] == "false") { isCopyRequiresWriterPermission = false; }else{ throw "引数の設定に誤りがあります"; } var updateOptions = { "restrictions": { "adminManagedRestrictions": isAdminManagedRestrictions, "domainUsersOnly": isDomainUsersOnly, "driveMembersOnly": isDriveMembersOnly, "copyRequiresWriterPermission" : isCopyRequiresWriterPermission } }; //共有ドライブを作成 //requestIdが必須なので、UUIDを発行して渡す var uuid = Utilities.getUuid(); //実行するユーザーに共有ドライブ作成を管理コンソールの設定で許可しておかないとエラーになるので注意 var res = Drive.Drives.insert(insertResources, uuid); //共有ドライブの設定を更新 //共有ドライブの設定権限がないユーザーで実行すると、エラーが出ずに変更もされていないので注意 var updateResources = { "useDomainAdminAccess": true }; var res_update = Drive.Drives.update(updateResources, res.id, updateOptions); result = "Success"; }else { result = "同じ名前の共有ドライブが既に存在します"; } }catch(e){ result = "Error:" + e; } //実行結果をResult列にセット createDriveSheet.getRange(row.rowNumber, numColumns).setValue(result); } } } function updateDriveMember() { var lastColum = updateDriveMemberSheet.getLastColumn(); var lastRow = updateDriveMemberSheet.getLastRow(); var startRow = 2; var numRows = lastRow - startRow + 1; var numColumns = lastColum ; var dataRange = updateDriveMemberSheet.getRange(startRow, 1, numRows, numColumns); var data = dataRange.getValues(); for (var i = 0; i < data.length; ++i) { var row = data[i]; row.rowNumber = i + 2; //Result列がブランクであれば処理を実行 if (!row[numColumns - 1]) { var result = ""; try { //共有ドライブ名からのドライブIDを取得 var driveID = searchDriveIDbyName(row[0]); if(driveID=="Error") { result = "ドライブIDの取得でエラーが発生しました"; } else if(driveID=="Duplicate"){ result = "同じ名前の共有ドライブが複数存在します"; } else if(driveID=="Nothing") { result = "対象の共有ドライブが存在しません"; }else { if(row[2]=="add") { //対象の共有ドライブにメンバーを追加 //グループではなくユーザーで決め打ち //https://developers.google.com/drive/api/v3/reference/permissions/create var member = { "value": row[1], "type": "user", "role": row[3], }; var options = { "sendNotificationEmails" : false, "supportsAllDrives": true, "supportsTeamDrives": true, "useDomainAdminAccess": true, }; Drive.Permissions.insert(member, driveID, options); result = "Success"; } else if (row[2]=="remove") { //対象の共有ドライブのPermissionsを取得 var listOptions = { "supportsAllDrives": true, "supportsTeamDrives": true, "useDomainAdminAccess": true, }; var permissionList = Drive.Permissions.list(driveID, listOptions); //対象のメンバーを含むPermissionのみを抽出 var permission = permissionList.items.filter(function(perm) { return perm.emailAddress == row[1]; }); //対象の共有ドライブからメンバーを削除 var removeOptions = { "sendNotificationEmails" : false, "supportsAllDrives": true, "supportsTeamDrives": true, "useDomainAdminAccess": true, }; Drive.Permissions.remove(driveID, permission[0].id,removeOptions); result = "Success"; }else { result = "Actionの指定が正しくありません"; } } }catch(e){ result = "Error:" + e; } //実行結果をResult列にセット updateDriveMemberSheet.getRange(row.rowNumber, numColumns).setValue(result); } } } //引数で受け取った文字列の共有ドライブが存在する場合は"driveID"を、 //ドライブが存在しない場合は"Nothing"、 //複数のドライブが存在する場合は"Duplicate"、 //エラーが発生した場合は"Error"を返す function searchDriveIDbyName(driveName) { var driveID = ''; try { var options = { "q": "name='" + driveName + "'", "useDomainAdminAccess": true, }; var driveList = Drive.Drives.list(options); if(driveList.items.length==1) { driveID = driveList.items[0].id; } else if(driveList.items.length==0) { driveID ="Nothing"; } else { driveID ="Duplicate"; } }catch(e){ driveID = "Error"; } return driveID }
これで共有ドライブを自動生成し、メンバーと権限を割り当てることは出来たのですが、その生成した共有ドライブ内に新たにフォルダを複数つくり、メンバーと権限を割り当てたいです。
どのように編集すればよろしいか、ご教授いただけないでしょうか。
宜しくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/17 05:48