Denen blog

株式会社電縁の社員によるブログです。

Google Apps Script でログインしているユーザごとに表示を変える

こんにちは、イノベーションオフィスの吉田です。

以前、Google Apps Scriptに関して以下の記事を書きましたが、また別のツールを作成したのでご紹介したいと思います。

denen.hatenablog.com

 

今回は「ログインしているユーザごとに表示を変える」方法になります。

社内向けのツールなどを作っていると、ログインしているユーザごとに表示を切り替えたい場合が出てきますよね?

実はログインしているユーザ(Googleアカウント)を取得するのは非常に簡単です。

  var user = Session.getActiveUser();
  var email = user.getEmail():

はい、これだけです。

とはいえ記述する場所には注意が必要で、コード.gsの中のdoGet()内に記述してください。

 

ユーザの情報が取得できたので、今度はそれに紐付く関連情報を取得したいと思います。

関連情報に関しては以下の様にGoogle Spreadsheets上に表形式で登録されているものとします。

f:id:yasuaki-sakai:20180521151208j:plain

メールアドレスをキーに検索を行うわけですが、いい感じの記事が有りましたので以下を参考にさせていただきました。

tonari-it.com

結果、以下のコードでスプレッドシートから値を取得することが出来ました。

  // スプレッドシートを開く
  var spreadsheet = SpreadsheetApp.openById('XXXX-XXXXXXX');
  // シートを選択
  var sheet = spreadsheet.getSheetByName('シート1');
  // 該当の行を取得
  var row = findRow(sheet, user.getEmail(), 1);

  function findRow(sheet,val,col){
    // 受け取ったシートのデータを二次元配列に取得
    var dat = sheet.getDataRange().getValues();
 
    for(var i=1;i<dat.length;i++){
      if(dat[i][col-1] === val){
        return i+1;
      }
    }
    return 0;
  }

最後はこれを画面に表示してみましょう。

Google Apps Scriptで画面を表示する為にはまずHTMLを用意する必要があります。

プロジェクトのメニューからファイル⇒新規作成⇒HTML ファイルを選択すると、index.html が追加されるかと思います。

あとはこれを以下のように表示するだけです。

  // テンプレート生成
  var tpl = HtmlService.createTemplateFromFile('index'); 
  // 社員名
  tpl.employee_name = sheet.getRange(row, 2).getValue();
  // 役職
  tpl.employee_position = sheet.getRange(row, 3).getValue();
  // テンプレートを表示
  return tpl.evaluate(); 

こちらもdoGet()の中で記述するようにしてください。

 

メニューから公開⇒ウェブ アプリケーションとして導入と辿って、「最新のコード」と書いてあるリンクから動作が確認出来るかと思います。

なお、実際に公開する際は「次のユーザーとしてアプリケーションを実行:」という項目で「ウェブ アプリケーションにアクセスしているユーザー」を選択してください。

これを選択しないと誰がアクセスしてもスクリプトの作成者の情報が表示されてしまいます。

 

いかがでしたでしょうか?

結構簡単だったのではないかと思います。

また良さげな使い方があったらご紹介したいと思います。

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain