R&D部のHealerです。
大雪で各地混乱してますね。
家の外では子供達が楽しそうに雪遊びをしていて微笑ましいですが、
私は引きこもってこのブログを書いています。(笑)
さて、今回は表題の通り、PlayFramework + Java でxlsxファイルの作り方になります。
今まで私が関わってきた案件では、
必ずと言っていいほどお客様への表組みのレポートの提出が求められます。
レポート内容はさまざまなんですが、大別して2種類のファイル形式で提出しています。
- csv
- 言わずと知れたComma-Separated Valueの略。
- カンマ区切りのテキストとしてでレコードを作成出来るので作成は非常に楽。
- 単純なテキストファイルなので罫線や着色などの装飾は一切なし
- 文字コードの取り扱いに注意が必要。
- xls(xlsx)
- Microsoft Excelで使用されるファイル形式
- 表組みのファイル形式ではデファクトスタンダード。
- 豊富な装飾が可能
ファイルを作る側としては基本的にはこちらを推しますが、
やはり、装飾付きで見やすいものにして欲しい、
お客様の社内で提出できるフォーマットにして欲しい
という要望もあり、xls(xlsx)ファイルでの提出を求められます。
そこで、PlayFrameworkとJavaを使ってxlsファイルを作って見ることにします。
JavaだとPOIなんかを始め、たくさんのモジュールがありますが、
Playを使うということでせっかくなのでexcelモジュールを試してみることにします。
1.excelモジュールをインストール
PlayとJavaはすでに用意できているという前提で進めます。
excelモジュールのページはこちら。
インストールは簡単で、play installのみ。
個別にダウンロードしてきたりする必要はありません。
versionはxlsxファイルを扱いたい場合は末尾に「x」がついているものを指定します。
モジュールのサイズが結構違うので、要件に合ったものを選んで下さい。
dependencies.ymlも以下のように設定します。
依存性の解決をしましょう。
これで準備完了です。
2.テンプレートを用意
テンプレートとして使用するxlsファイルを用意します。
下記のような構成とします。
氏 | 名 | 住所 | 電話番号 | メールアドレス |
---|---|---|---|---|
<jx:forEach items="${persons}" var="person"> | ||||
${person.name1} | ${person.name2} | ${person.address} | ${person.phone} | ${person.mail} |
</jx:forEach> |
${変数名}で変数内容がセットされます。
${Mapオブジェクト.変数名}Mapオブジェクトも使用出来ます。
jx:forEachタグを使うと繰り返しにも対応できます。
上の構成ではpersonsというMapオブジェクトのListを用意して、
jx:forEachタグで繰り返しを行います。
itemsにListオブジェクトの変数${persons}を指定、
varに繰り返しの中で使用するMapオブジェクトの名前を指定します。
3.テンプレートを読み込んでxlsファイルを作成
Controller配下ににmakeExcelというメソッドを作成します。
メソッドの内容はテンプレートにセットする各オブジェクトを用意して、renderするシンプルなものです。
これでmakeExcelにアクセスするとroster.xlsというファイルが作成されるようになります。
作成されたファイルはテンプレートの指定通り、下記のような内容となります。
氏 | 名 | 住所 | 電話番号 | メールアドレス |
---|---|---|---|---|
鈴木 | 一朗 | 東京都 | 00-0000-0000 | xxxxxxxxxx@xxxx.xxx |
大村 | 三郎 | 千葉県 | 00-0000-0000 | xxxxxxxxxx@xxxx.xxx |
以上のように、Play + Javaでxlsファイルが簡単に作れました。
今回はMapオブジェクトの指定とと繰り返ししか紹介しませんでしたが、
他にも関数を指定したり色々出来ますので試してみて下さい。
それでは。
それでは。