2016-12-12 10 views
0

スプレッドシート内の特定のセルが編集された後、数秒間実行される小さなGoogle Appsスクリプトがあります。Google Apps Script - スクリプトの実行中にセルの編集を防止する

私の質問は、現在のユーザーがスクリプトの実行中にスプレッドシートをさらに変更することを防ぐことができるかどうかです。

だから、このようにする必要があります: 1.セルは 2.スクリプトが実行されて編集され、現在のユーザーのユーザーインタラクション/変更が 3.スクリプトは現在のための 4.ユーザーインタラクション/変更が行われているブロックされていますユーザーはブロックされていません

ご協力いただければ幸いです。

多くのおかげで、 マーティン

+1

何が起こっているのかを説明し、スクリプトの実行が終了するとプログラムで閉じられる、非表示のUIダイアログを使用することをお勧めします。 –

答えて

1

あなたはクラスの保護を使用することができます。https://developers.google.com/apps-script/reference/spreadsheet/protectionあなたが試すことができます上記のリンクから適応

function pro(){ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var protection = sheet.protect().setDescription('Sample protected sheet'); 

    // 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); 
    } 

    //YOUR CODE TO RUN 

    SpreadsheetApp.flush(); 
    protection.remove(); 
} 

EDIT

これは私のために働きました:

function onEdit(){ 
    //Adapted from: https://developers.google.com/apps-script/reference/spreadsheet/protection 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; 
    var me = Session.getActiveUser().getEmail(); 

    if (me != 'owner email'){ 
    var protection = sheet.protect().setDescription('Sample protected sheet'); 
    protection.removeEditors(protection.getEditors()); 
    if (protection.canDomainEdit()) { 
     protection.setDomainEdit(false); 
    } 

    //YOUR CODE TO RUN 
    SpreadsheetApp.flush(); 
    protection.remove(); 
    } 
} 
+0

これは、有効なユーザーに対しては機能しません。それは他のすべてのエディタ(所有者ではない)をロックアウトしますが、スクリプトの実行中にユーザーが編集を停止することはありません。 –

+0

@SpencerEaston私はそれがうまくいくと信じていますが、これは最善の解決策ではないかもしれませんが、うまくいきます。ここで試してみることができます:https://docs.google.com/spreadsheets/d/1cxiG2olk8FxZV30lCxv7aNnwoqC1c6NWICTq4UMaHzI/edit#gid=0 – utphx

+0

はい、ユーザーがゆっくりと編集し、エラーボックスが心配しない場合に機能します。また、コードがすべてのエディタを削除してUIをブロックし、更新された権限を削除する前に失敗/タイムアウト/クォータアウトするシナリオについて考えてみましょう。本当に正しい解決策は、「ユーザーをUIからロックしないでください」ですが、モーダルダイアログボックスのようなより優雅なソリューションを使用する必要がある場合は、解決してください。 –

関連する問題