2016-09-20 5 views
0

私の会社の購買発注システムを再設計しています。私は、完全に自動化されたプロセスの近くにプロセスを作り、1か所に住みたいと思っています。私はサプライヤが引用符(値段)を入力してタブを編集する必要があるビットから離れて多くの問題を抱えていませんでした。Googleスプレッドシートのタブを非表示にする

問題は他のサプライヤー(競合他社)のタブを見ることができ、これが起こりたくないということです。

私はアプリスクリプトの中間体なので、自分のやり方を見つけ出し、現時点では機能する小規模なスクリプトを作成できますが、スケールを大きくするとコードに問題が生じることが心配です。

以下のスクリプトは、有効なユーザーを確認し、ユーザーの電子メールアドレスに応じてタブを非表示にします。これはすべてうまいですが、各サプライヤ(5人中)が他の4つの売り手タブを見ることができないようにしなければならない大きなスケールでは、問題が発生します。

function validUsers() { 
    var adminUsers = ['[email protected]']; 
    var Users = ['[email protected]']; 

    if (adminUsers.indexOf(Session.getEffectiveUser().getEmail()) >= 0) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Seller1").showSheet() 
    } 

    if (Users.indexOf(Session.getEffectiveUser().getEmail()) >= 0) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Seller1").hideSheet() 
    } 
} 

基本的には、私がやっているよりもまっすぐ進む方法か良い方法がありますか? 私が望むのは、どの売り手がシートを編集しているかに応じて、5つの売り手タブのうち4つを隠すことです。したがって、Seller1は、実際には5つのSellerタブがあるSeller1タブのみを表示します。

+0

これは本当にスプレッドシートを行うように設計されているものではありません。現在のインフラストラクチャを維持したい場合は、スプレッドシートを直接見ることなく、各ユーザーが独自のフロントエンドを持つ[Webアプリケーション](https://developers.google.com/apps-script/guides/web)を作成することを検討してください。 –

+0

だから、各ユーザに自分のドキュメントのインスタンスを示すメニューシステムを構築することができました。 –

答えて

0

すべての売り手を1つのスプレッドシートに含めるのではなく、アクセス権のある売り手ごとにスプレッドシートファイルを作成することを検討しましたか?その後、importrange()関数を使用して、それぞれを中央のスプレッドシートにインポートします。これにより、コードの必要性は最小限に抑えられますが、サプライヤの情報に対するすべての変更は、関連付けられたファイルで行われる必要があります。中央のスプレッドシート内の内部計算用の数式を含む列を追加することはできます。

カール

0

ありがとうございました。私はサプライヤーのための代替またはフォームとしてこれを考えてきましたが、私は問題を解決しました。

私は今、最初に非表示のウェルカムタブを隠しています。文書を開くと、パスワードを尋ねるプロンプトボックスが表示されます。指定されたパスワードに応じて、特定のタブが表示されます。これにより、彼らは変更を加えることができ、スタッフはすべてにアクセスし、サプライヤはお互いの見積もりを見ることができません。

よろしく、

ジェームズ

関連する問題