2

私はあらゆる場所を調べましたが、GAS は Google スプレッドシートに追いついていないようです。シート内の特定の範囲に保護を設定するための総当りの方法はありますか..? (そして、すべての数式で保護されたシートを作成し、それらを参照しても役に立ちません。)

Google でこれを見つけました: https://code.google.com/p/google-apps-script-issues/issues/detail?id=1721

私も一番下にコメントしました。(有用というよりも苦情のほうが多いです。) しかし、私の上の人がこのコードを投稿しました:

//Function to Protect Target Sheet
function ProtectTargetSheet() {

      //Enter ID for each Worksheet
      var IDs = ["Sheeet_1", "Sheet_2"]

      //Enter Page to protect, in order of WorkSheets
      var Sheet_names = ["Page_1", "Page_2"]

      //For each sheet in the array
      for ( i = 0; i < IDs.length; i ++) {

        //id of sheet
        var sheet = IDs[i]

        //activate dedicated sheet
        var ActiveSheet = SpreadsheetApp.openById(sheet)

        //Find last row and column for each sheet
        var LastRow = ActiveSheet.getSheetByName(Sheet_names[i]).getLastRow();
        var LastCol = ActiveSheet.getSheetByName(Sheet_names[i]).getLastColumn();

        //Name of protectSheet
        var Name = "Protect_Sheet";

        //Range for Protection
        var Named_Range = ActiveSheet.getSheetByName(Sheet_names[i]).getRange(1, 1, LastRow, LastCol);

        //Impletment Protect Range
        var protected_Range = ActiveSheet.setNamedRange(Name, Named_Range);
      }
}

共有されたときに範囲を保護するためにこれがどのように機能するのかわかりません。名前付き範囲を作成するだけのようです。彼は最初に権限を手動で設定するように言っています。しかし、彼が何を意味したのか正確にはわかりません。

とにかく、Google が GAS を対応するものと同期するまで、誰かがこれを行う方法を見つけてくれることを願っていました。

私の願いは、100% コードを使用して、スプレッドシート内のシート内の範囲を選択し、このスプレッドシート全体を誰かと共有するときに、その範囲を編集できないようにすることです。そのシートには、編集できる必要がある他の部分があります。その範囲ではないだけです。これを手動で行うのは簡単ですが、何百ものスプレッドシートを作成する必要がある場合は、GAS を介してこれを実行できると便利です。

ありがとう。

4

4 に答える 4

1

私が見つけた最も簡単なアプローチは、データ検証を使用することです。つまり、各セルを「保護」するように検査し、既存のコンテンツの入力を強制し、それ以外を拒否する検証ルールを作成して適用するスクリプトを作成します。[もちろん、これは、入力されたすべてのデータが数式が埋め込まれたシートとは別のシートまたはシートにあるように、スプレッドシートを設計したことも意味します。これらでは、通常のシート保護を使用します。]

于 2013-09-16T20:44:52.590 に答える
1

2015 年 2 月 19 日に投稿されたApps Script を使用して Google スプレッドシートで保護された範囲とシートを制御する によると、Google スプレッドシートの範囲を保護できるようになりました。

https://developers.google.com/apps-script/reference/spreadsheet/protectionから

クラス保護

保護された範囲とシートにアクセスして変更します。保護範囲は、セルの静的範囲または名前付き範囲のいずれかを保護できます。保護されたシートには、保護されていない領域が含まれる場合があります。古いバージョンの Google スプレッドシートで作成されたスプレッドシートの場合は、代わりにPageProtection クラスを使用してください 。

 // 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);
 }
于 2016-02-13T15:03:47.117 に答える