2016-06-17 7 views
0

Googleシートに異なるシートを持つスプレッドシートがあります.3人のユーザーがそれぞれ1枚のシートを編集できます(保護が設定され、 )。彼らはすべて、編集した内容を要約シートに書き込むGoogleスクリプト機能を実行できます。誰かが要約シートを編集するのを嫌っているので、唯一のエディタとして自分自身を設定しました。 私の問題は、3人のユーザーに、Googleスクリプト機能を介してのみ要約シートに書き込むことを許可することです。私は次の関数を使用しようとしました:Googleスクリプト:ユーザーに権限がないときにシートスルー機能の保護を解除する

var unprotected = summarySheet.getRange( 'G3:G10'); protection.setUnprotectedRanges([unprotected]);

しかし、ユーザーはサマリーシートの編集を許可されていないため、アクティブユーザーと一緒に機能が実行されるため、サマリーシートの範囲の保護を解除する権利はありません。この問題を回避する方法を知っていますか?

ありがとうございます!

答えて

0

私は2つのスクリプトベースの選択肢、簡単なものとはかなりハード1、および1枚ベースの選択を参照してください、それが最も簡単です:

簡単:
あなたはそれらの代わりに「要約」スクリプトを実行しますか、要約スクリプトは、アカウントからトリガーを実行して実行するように設定します。それでは、実際に保護だけを残しています。ユーザーが要約シートの保護を解除したり、要約シートに書き込むために必要な権限を持っていない場合は、エラー・キャッチで開いた状態で実行するように要約スクリプトを設定できます。

ハード:
"summarize"スクリプトを実行すると、必要な保護の変更を行うための権限が与えられた公開スタンドアロンスクリプトが呼び出されます。正直言って、これをコード化することはできませんが、同様の実装を見たり聞いたりしました。

最も簡単:

は最後に、私はあなたがこの側面用のスクリプトを必要とせずに他のシートからのデータを要約するなど、解析し、要約シート自体が、必要な数式が含まれたと考えられてきましたを確認しますシートの解析やその他の集計機能が組み込み関数の機能を超えている場合は、必要に応じてカスタム関数を呼び出すことができます。スプレッドシートの設定で自動再計算がオフになっていない限り、シートは完全に保護され、ユーザーがデータを入力するとリアルタイムで更新されます(ユーザーがサマリー作成をトリガーする必要はありません)。

を追加するように編集:

=summarize() 

とカスタム機能がまとめたデータの2次元配列を返すことがあります:概要シートのA1にのようなものを置きます。

+0

シートベースのソリューションでは、要約データがリアルタイムで更新されないようにする必要があるため、ユーザーが望む場合にのみ、私の問題に答えることはできません。私はトリガーが所有者に限られていたことを知らなかった、それは仕事をするだろう!ありがとう –

+0

あらかじめ定義されたトリガーを持ち、「ユーザーが必要なときにのみ」実行するのは難しいです。エンドユーザが編集可能なセルにトリガを設定することができます(たとえば、編集可能なシートの事前定義された場所にTRUEで「要約できますか」という質問に答えます)。そして、実行後にそのセルの値をFALSEに戻すようにスクリプトを設定します。しかし、これよりはるかにエレガントなソリューション! –

関連する問題