Google Apps ScriptでVue対応組織図を生成する【GAS】

以前、GoogleのVisualization APIを使っての組織図をGASで作成したことがあります。スプレッドシートをベースに作成するタイプのOrgChartというものを使っていました。ただ、作り方が若干面倒くさいデータ構造になっていて素直ではなく、スプシから作れるのは良い点なのですが、効率が悪かったです(部署とそこにぶら下がる人を別々に管理する必要がある)。

そこで、Vue.js対応のVue-Organization-Chartと呼ばれるプラグインを利用して、同じくスプシからより簡単な構造のデータより生成できないか?チャレンジしてみました。

Google Apps Scriptで組織図を作ろう【GAS】

今回利用するファイル等

今回のコードではスプレッドシートのデータをツリー構造のデータに変換する必要があります。こちらのサイトのコードを改造し適合するように修正しています。このコードは配列データの親子関係を元にツリー構造のJSONデータに変換してくれるもので、クラスを利用して作られています。

通常のロジックではツリー構造を構築するのは非常に大変ですが、このクラスの仕組みによって、OrgChartライブラリに適した形にデータを変換できる為、利用者は親子関係のみを意識すればそのまま組織図に変換できる為、前回の仕組みよりもより効率的に組織図を構築することが可能です。

Google Apps Scriptでクラス構文を活用する【GAS】

データの準備

ライブラリのCDN

今回の描画用ライブラリはVue.js用に作られています。HTML側コードにて以下のライブラリを参照するよう追加しています。

スプシのデータ構造とルール

今回のライブラリ用にスプレッドシートのデータ構造を構築しています。

  • 1行目のタイトル列は重要な参照項目となってるため、今回のコードでは変更すると読み込めなくなります。変更したい場合は、データを整形する1行目に今回のスプシのタイトルと同じ名称の配列を追加してあげる必要があります。
  • データ部分の一番最初の行となる2行目は必ず組織トップの社長である必要があり、codeやparentCodeの値は0である必要があります。
  • codeは各組織の持つ固有のコードですので重複してはいけません。
  • parentCodeは親となるcodeの値を指定します。これが親子関係を構築する重要なキーとなっています。
  • 1つの組織に複数の子組織が所属できるので、parentCode自体は重複して問題はありませんが、存在しないcodeの指定は出来ません。
  • ID列は特に今回のケースでは意味がありません。ただし改造次第ではユニークな連番としておくことで、対象者のレコードの特定などに使えます
  • nameに組織名を入れますtitleにはその組織の所属長の人間の名前を今回は入れています。

図:シンプルになったデータ構造

ソースコード

利用する場合には、スプレッドシートを開いて出てくるメニューの組織図=>セットアップを必ず実行します。スプレッドシートのIDがスクリプトプロパティに格納されウェブアプリとして利用する場合に必要になります。

また、必ずウェブアプリケーションとしてデプロイしてから利用する必要があります。以下のエントリーを参照し、デプロイをした後に末尾がexecのURLをSitesなどに貼り付けると良いでしょう。

Google Apps Scriptでウェブアプリケーション作成入門【GAS】

GAS側コード

ウェブアプリの生成

こちらは単純にウェブアプリとして出力やスプレッドシートのIDを格納するだけのコードです。

ツリーデータを生成するコード

  • treenodeクラスが今回の各部署のノードを構築する重要なクラスになります。
  • backjson関数がスプレッドシートをJSON形式に変換するコードになります。
  • createTreeNode関数がJSON形式のデータおよび社長のレコードデータを元にツリー構造のJSONデータに変換するコードの本体になります。
  • 返り値のchildren配列が空っぽの場合はconstractorの変数自体を削除するようにしています(つまり子要素が無いケース)
  • 最終的に社長のノードに全ての要素が子要素を携えてぶら下がるようになります。
  • geneNodedata関数がHTML側からの要求に答えてツリー構造のJSONデータを返す関数になります。

GoogleスプレッドシートのデータをJSONで取得する【GAS】

HTML側コード

今回は本当にシンプルにGAS側からデータをロードして、はめ込んでるだけの構造です。ライブラリを初期化しComponentsに追加が必要なので要注意。dsソースに対してツリー構造のJSONデータが格納されます。

生成されたツリー構造のJSONデータ

サンプル表示

サンプルでは横スクロールすると全体像が見えます。Google Sitesなどに貼り付けておくと良いでしょう。今回は殆ど無改造で使っていますが、ClickイベントなどをセットしたらGoogle Workspaceのディレクトリ参照して詳細な情報を出すといったような改造を施すことでより組織図が生きてくると思います。

サイトに貼り付けた事例はこちらから見ることが可能です。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)