特定の状況が発生した場合に特定のセルを保護する、Googleスプレッドシート用のGoogle Appsスクリプトを作成できるかどうかは誰にもわかりませんか? FX。「A1」に X が発生した場合、「A2」を保護する必要がありますか?
5 に答える
そうではない。それが細胞保護の仕組みだとは思いません。セルが手動で保護されているか、まったく保護されていません。
その機能を有効にするセル関数またはスクリプト オブジェクトはありません。
セル保護を管理する API はまだありません。この機能リクエストはこれを求めています。スターを付けて、更新を追跡したり、投票したりすることができます。
私はこれが古い質問であることを知っていますが、それでも - Google の "feture request" (Henrique Abreu によって投稿された) は今まで進歩していません (2014 年末)
私の推測:この種の機能は、ユーザーが後でロックされるセルを編集するように要求された場合 (基準または別の種類のロジックによって)、Google フォーム ( http://www.google.com/forms/about ) の回避策になります。
私は最近、職場で同様の状況に遭遇しました。私の解決策は非常に簡単です。フォームを作成して、関連するユーザーと共有します。フォーム フィールドを使用すると、ユーザーはロックする必要があるデータを入力できます。そのフォームは最終的に情報のシートを生成します (フォームが入力されるたびにオンラインで更新されます)。別のシートから「IMPORTRANGE」 ( https://support.google.com/docs/answer/3093340?hl=en ) を使用すると、関連するシート内の「ロックされた」情報を照会することになります。データは別のシート内にあり、数式として表されているため、編集できません (少なくともデータとしては編集できません)。
実際にセルを「ロック」できる真の回避策を実際に検討しています(その値をスクリプトで元の値に置き換えることにより)..そのような要求がある場合
回避策があります。コードは次のとおりです
function protect_named_range(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target_sheet = ss.getSheetByName('Sheet1');//change "sheet1" for the sheet your range is in
var array_range1 = target_sheet.getRange("A1:A1");
var array_range2 = target_sheet.getRange("A2:A2");
var range_test = array_range1.getValue();// or getFormula or what ever you want to test
if(range_test == "correct answer"){ //if cell A2 = "correct answer" then cell B2 becomes a named range called "named_range"
ss.setNamedRange("named_range", array_range2);
SpreadsheetApp.setActiveSheet(target_sheet);
var sheet = SpreadsheetApp.getActiveSheet();
var permissions = sheet.getSheetProtection();
permissions.setProtected(true);
target_sheet.setSheetProtection(permissions);
}
}
すみません、しばらく離れていました。これは私が使用する基本的なコードですが、セル A2 = "正解" の場合、実際には範囲 "B2" を保護しません。代わりに、セル A2 = "正解" の場合、"sheet1" という名前のシートを保護するため、スプレッドシートの所有者のみがシート上のあらゆるものを編集できます。
これがあなたの目的ではないことは承知していますが、お役に立てば幸いです。