2016-07-05 21 views
1

私はApps Scriptを初めて使用しています。私はStack Over Flowを検索して同様の質問を見つけ、見つかった情報を使って問題を解決しようとしましたが、これまで成功していませんでした。うまくいけば、ここの誰かが初心者にいくつかの指導を与えることができます。Googleスプレッドシート - ユーザーが保護された範囲でスクリプトを実行できるようにする

私は他のユーザーと共有しているスプレッドシートを持っています。私が保護しようとしている数式の範囲がいくつかあります。私は保護された範囲内でforumlasを変更できるスクリプトを書いています。私のアカウントでは完全に動作しますが、共有ユーザーは「権限を持っていない」ためスクリプトを実行できません。

保護された範囲を編集するための一時的なアクセスを許可しようとするコードを少し書こうとしました。私の考えは3つの異なる機能を持つことでした。最初の関数は保護を削除します。 2番目の機能は、保護されていない範囲の変更を実行します。 3番目の機能は、範囲を再度保護します。以下のコードは私のアカウントの下で完全に動作します。しかし、共有ユーザーとしてログインすると「実行する権限がありません」という警告が表示されます。

誰かが間違っていると私に正しい方向を教えてください。

function myFunction() { 
    //add protections back 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getSheetByName('Spray Template'); 
    var range = sheet.getRange('B15:E15'); 
    var range2 = sheet.getRange('G15:H15'); 
    var range3 = sheet.getRange('D16:E16'); 
    var ranges = [range,range2,range3]; 
    for (var j = 0; j<3; j++){ 
    ranges[j].protect().removeEditor('[email protected]'); 
    } 
} 


function myFunction2(){ 
//remove protections 
var ss = SpreadsheetApp.getActive(); 
var ss2= ss.getSheetByName('Spray Template'); 
var protections = ss2.getProtections(SpreadsheetApp.ProtectionType.RANGE); 
f 
or (var i = 0; i < protections.length; i++) { 
    var protection = protections[i]; 

protection.addEditor('[email protected]'); 
SpreadsheetApp.flush(); 
protection.remove(); 
} 
} 

function test() { 
    myFunction2(); 
    functionThatChangesRange(); 
    myFunction(); 
} 

答えて

0

私はそれらの保護範囲へのアクセス/編集するための許可を得ずに、他の人にも(でも、スクリプトを通じて)保護自体を編集する権限を持たないだろうと想像します。

これは、スクリプトが実行されているユーザー(つまりそのスクリプトがそのユーザーのアカウントで実行されている)からアクセス許可を継承するためです。

明らかに、あなたは範囲を保護することはできませんし、誰もが保護を変更することを許可することはできません - それは目的を全滅させるでしょう!

0

私は、1つのセルを保護されないままにし、 'onedit'を実行するドキュメント内にスクリプトをセットアップすることを他の場所で提案しているのを見ました。ユーザーがそのセルの値を変更するたびに、スクリプトが実行されます。

関連する問題