2016-05-01 5 views
3

大規模なブロックのセルを選択的にロックするスクリプトをGoogleスプレッドシートに作成しています。毎日、同じ保護範囲に1行以上のセルを追加する必要があります。Googleスプレッド内の名前付き保護範囲を検索して削除するにはどうすればよいですか?

保護が必要な行の位置を特定し、実行するたびに新しい保護された範囲を作成するという点ではスクリプトがこれまでに動作していますが、実行されるたびに(onOpenになりたい)保護された範囲、および別のもの、および別のものである。私は保護された範囲 "歴史"の名前をつけましたが、私は、次回の実行時に、その範囲を保護解除して新しい範囲を保護する方法を見つけられません。

シートには他の保護されたセルがあるので、すべての保護を削除してから先に進めることはできません。この1つだけを削除する必要があります。ロックされているセルの範囲が変化し続けるので、私はスクリプトがこの1つの範囲を特に探すようにする必要があります。

アイデアがありがとうございます!

+0

あなたは努力しましたか? – manetsus

+2

努力?はい - 私はそれを理解しようとしてきましたが、これはシートやGoogleスクリプトで何かをやって初めてのことなので、難しいと思っています。私はこれが助けになる場所だと思った... –

答えて

1

既存の保護を更新するには、まずそれを取得する必要があります。私はこれを直接行う簡単な方法を見つけることはできませんが、シート(またはスプレッドシート全体)のすべての保護を取得し、それらをループして目的のものを見つけることができます。

var protections = ws.getProtections(SpreadsheetApp.ProtectionType.RANGE); 
for (var p in protections) { 
    if (protections[p].getDescription() == 'History') { 
    var protection = protections[p]; 
    break; 
    } 
} 

は今、あなたは新しい保護を作成せずにその範囲を更新するprotection.setRangeメソッドを使用することができます。

var rangeNew = ws.getRange('A1:C3'); 
protection.setRange(rangeNew); 

ここでシートgetProtectionsTypeと保護setRange方法に関するドキュメントです。名前付き範囲でこれを行う方が良いかもしれないことに注意してください。保護範囲と同じ方法で取得して更新することができます。

関連する問題