解決済みの質問(https://teratail.com/questions/5029)の応用編です。
【やりたいこと】
複数人で共有(編集者権限を有する)しているGoogleスプレッドシートで、特定範囲のセルを保護し、かつそのスプレッドシートのオーナー以外の編集者はその保護された範囲の編集権限は無効に(削除)する設定をGASで実現したいと考えています。
※本来ならば手動で設定すれば良いことなのですが、前述のスプレッドシートは複数あるため、GASのライブラリ機能を利用して一括で設定したいのです。
【質問】
そこで、Googleのリファレンスにある参考スクリプト(https://developers.google.com/apps-script/reference/spreadsheet/protection#getProtectionType())を試してみたのですが、思うような設定(オーナー以外の編集者の編集権限を無効(削除))ができませんでした。
下記参考スクリプトで実現できそうなのですが、間違っていますでしょうか?
ご教示のほど宜しくお願いいたします。
// Protect range A1:B10, then remove all other users from the list of editors. var ss = SpreadsheetApp.getActive(); var range = ss.getRange('A1:B10'); var protection = range.protect().setDescription('Sample protected range'); // Ensure the current user is an editor before removing others. Otherwise, if the user's edit // permission comes from a group, the script will throw an exception upon removing the group. var me = Session.getEffectiveUser(); protection.addEditor(me); protection.removeEditors(protection.getEditors()); if (protection.canDomainEdit()) { protection.setDomainEdit(false); }
※追記 2015/07/16
少し進展がありましたので共有させていただきます。
下記参考スクリプトから、
var ss = SpreadsheetApp.getActive(); var range = ss.getRange('A1:B10'); var protection = range.protect().setDescription('Sample protected range'); var me = Session.getEffectiveUser(); //※① protection.addEditor(me); //※② protection.removeEditors(protection.getEditors()); if (protection.canDomainEdit()) { protection.setDomainEdit(false); }
「※①」と「※②」を省くことで、私のやりたいこと(オーナー以外の編集者の編集権限を無効(削除))が実現できました。
しかし、以下の条件でまだ不十分です。
【仮条件】
スプレッドシートは、スプレッドシートのオーナー、Aさん、Bさんの3名で共有(編集者権限有り)
【3名のスクリプト実行結果】
オーナー :オーナー以外の編集者権限を無効(削除)に成功
Aさん :Bさんだけ編集者権限が無効(削除)(オーナーとAさんは編集者権限有り)
Bさん :Aさんだけ編集者権限が無効(削除)(オーナーとBさんは編集者権限有り)
上記結果のとおり、オーナー以外の編集者に編集者権限が残ってしまうケースが存在してしまいます。
したがいまして、誰が実行してもオーナー以外の編集者の編集権限を無効(削除)にできる方法があればご教示ください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/21 01:06