ワークシートには複数のシートがあり、1つは編集用でもう1つは保護する必要があります。これは請求書/見積書ビルダーなので、新しいものを作成するたびにメインのコピーを作成します。明らかに保護は引き継がれないため、スクリプトエディターを使用して、私と他のユーザーを除くすべてのユーザーを削除しようとしています。
OnOpen()を動作させることができなかったので、クリックする必要があるメニューにボタンを追加するだけです(毎回これを行うことを信頼します)。関数を実行します。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('First item', 'testProtect')
.addToUi();
}
function testProtect(){
var sheet = SpreadsheetApp.getActiveSheet();
var protection = sheet.protect().setDescription('Test');
protection.removeEditor("[email protected]");
protection.removeEditor("[email protected]");
protection.addEditor("[email protected]");
var ui = SpreadsheetApp.getUi();
ui.alert("Permissions Set");
}
関数が実行され、そこで実行されているユーザーを削除する以外はすべて実行されます。私はアクティブなユーザーを取得してその方法で削除し、正確なメールを投げようとしました(これに触れるかもしれない従業員は8人しかいないので、必要に応じて各行を追加/削除しても構いません)。
この作業とは別に、彼らがLOLになってはならないことに触れないことを信頼する必要がありますが、それが時々どのように進行するかを知っています...
スプレッドシートの所有者をブロックできない理由は理解できますが、現在のユーザーをブロックすることは理にかなっています。ただし、ユーザーはGUIを使用して自分自身をブロックできないため、スクリプトもブロックできません。
ただし、誤った編集だけが心配な場合は、次を使用できます。
protection.setWarningOnly(true);
これは、所有者を含むすべてのユーザーに適用されます。残念ながら、警告テキストをもっと役立つものに設定する方法はなく、ユーザーは無視することもできます。
importrange
の提案も良いものです。