2016-04-25 9 views
0

スプレッドシートのメールアドレスの列に基づいてセルを更新する権限を設定しようとしています。例えば、私はロックされる必要があるセル "B2"を持っていて、電子メールアドレス "[email protected]"を持つシートにアクセスしているユーザの変更のためにロックを解除する必要があります。シート。電子メールアドレスは、ユーザーがシートを表示するために使用する電子メールアドレスと同じです。イメージは以下の通りです。助けや提案は大歓迎です。ありがとう!セルをロックして、特定のメールアドレスを持つユーザーのみがGoogleスプレッドシートのこれらのセルを更新するようにします

enter image description here

答えて

0

あなたはprotection classでこれを達成することができます。ここで

はあなたのためだけにこれを行いますいくつかのコードです:

これはemail列を下に移動して、メールアドレスのすぐ右にあるセルの保護範囲を追加します。

function ProtectRanges(){ 
    var ss = SpreadsheetApp.getActiveSheet() 
    var range = ss.getDataRange(); 
    var values = range.getValues(); 
    var columns = GetColumns(values, range.getNumColumns(), 0); //Get the column headers 

    for(var i = 1; i < values.length; i++){ 
    var email = values[i][columns.columns['email'].index]; //Get the email address from the 'email' columns 
    if(email !== ''){ 
     var rangeToProtect = ss.getRange(i+1, columns.columns['owner'].index + 1, 1, 1); //Get the range to protect, one cell over 
     rangeToProtect.protect().addEditor(email).setDescription("Only " + email + " has edit rights"); //Protect the range and add a description  
    } 
    } 
} 

//Gets a columns object for the sheet for easy indexing 
function GetColumns(valuesRange, columnCount, rowIndex) 
{ 
    var columns = { 
    columns: {}, 
    length: 0 
    } 

    Logger.log("Populating columns..."); 
    for(var i = 0; i < columnCount; i++) 
    { 
    if(valuesRange[0][i] !== ''){ 
     columns.columns[valuesRange[0][i]] = {index: i ,value: valuesRange[0][i]}; 
     columns.length++;  
    } 
    } 
    return columns; 
} 
+0

素晴らしいです!ありがとう! – CarbonD1225

関連する問題