Play framework/Excel出力
をテンプレートにして作成
Land.to
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Play framework]]
*Excel出力 [#o61376aa]
Excel出力機能を実装するためのモジュールが公開されているの...
jXLSはApacheプロジェクトのPOIを含んだツールで、効率的に帳...
xlsx形式への対応済。
jXLS自体には、POIを直接たたく術があるため、細やかな装飾を...
1つのシートを元にを複数のシートを増産することも非対応。こ...
**目次 [#i37447d0]
#contents
**インストール [#la224b31]
モジュールのインストールはコマンドラインから簡単に行える...
> play install excel-1.2.3
バージョンに'x'がついているものは、xlsx形式に対応したバー...
ノーマル版が3MBに対し、xlsx対応版は18MBあるため(公式ペー...
今回はxlsx形式を扱う予定が無かったので、ノーマル版とした。
+/modules配下に、excel-1.2.3というフォルダが作られる。
+README.textileを見ると、application.confに下記の設定を加...
module.Excel=${play.path}/modules/Excel
excel.template.root=app/views
+代わりにプロジェクトの依存性を管理するファイル、conf/dep...
# Application dependencies
require:
- play
- play -> excel 1.2.3
そして、コマンドプロンプトより依存性解決を指示する。
> play dependencies [アプリ名]
アプリフォルダ内に、modulesフォルダが作成される。
+eclipseで開発する場合はプロジェクトファイルを再生成する。
> play ec [アプリ名]
**使い方 [#ka4b2f9e]
-仕組みとしては、事前に用意したエクセルファイルをテンプレ...
-テンプレートの書き方は下記の[[リンク>#b91ebd07]]を参照。
-テンプレートは、viewsフォルダ配下のhtmlと同じように配置...
-Excel出力する場合は下記のように、リクエストフォーマット...
public static void excelOut1()
{
request.format = "xls";
String __FILE_NAME__ = "sample.xls";
String name = "田中";
render(__FILE_NAME__, name);
}
render()が呼ばれると、呼び元のメソッド名から「excelOut1.x...
**テンプレートの記法 [#k632a33a]
***変数の受け渡し [#h25069a7]
-render()で渡される第2引数以降は、htmlのテンプレート処理...
-Mapオブジェクトの要素へのアクセスは、ドットを用いる。
public static void excelOut1()
{
request.format = "xls";
String __FILE_NAME__ = "sample.xls";
String name = "田中";
Map obj = new HashMap();
Map obj2 = new HashMap();
obj.put("name", "すずき");
obj.put("address", "東京都");
obj2.put("name", "さとう");
obj2.put("address", "さいたま");
obj.put("omake", obj2);
render(__FILE_NAME__, name, obj);
}
これに対し用意したテンプレートはこちら。
#ref(1.png)
これらを基に出力されたExcelがこちら。
#ref(2.png)
気づきましたか? 4行目の記述で${obj.&color(red){okame};.n...
-「=10*5」という内容の文字列を渡した場合、式を評価する前...
-A1セルに ${value1}、A2セルに ${value2}として、A3セルに「...
***数式の埋め込み [#e6ef2b51]
-$[ ]を用いる。
-カッコ内に記述した式がそのまま出力される。$[10+5]とすれ...
-セル同士の演算も同じ。$[A1+A2+A5]とすれば、「=A1+A2+A5」...
-SUMなどの関数も同様。繰返し処理で増えるセルの場合であっ...
***繰返し処理 [#i5cb99be]
-jx:forEachタグを用いると、コレクションを繰返し表示するよ...
-jx:forEachタグでいくつかの行を挟み、挟まれた行が繰返し処...
-書式
<jx:forEach items="${コレクション名}" var="処理用の名前">
繰返したい行を挟む
</jx:forEach>
***繰返し処理+グループごと [#j932927f]
-jx:forEachタグで "groupBy" を用いると、指定したプロパテ...
-書式
<jx:forEach items="${コレクション名}" groupBy="グループ...
${group.item.グループ化したいプロパティ名}でグルー...
<jx:forEach items="${group.items}" var="処理用の名前">
繰返したい行を挟む
</fx:forEach>
</fx:forEach>
-抽出されるグループの出力順は、コレクションに格納されてい...
***繰返し処理+フィルタ [#r3402891]
-jx:forEachタグでコレクションを処理するに当たり、条件を満...
-"select" を使用する。
-書式例
<jx:forEach items="${items}" var="item" select="${item.a...
***繰返し処理+カウンタ [#y3b2be3e]
-jx:forEachタグでコレクションを処理するに当たり、何番目の...
-ゼロスタート。必要なら+1しよう。
-書式例
<jx:forEach items="${items}" var="item" varStatus="x">
${x.index +1}番目の処理です。
</jx:forEach>
***条件 [#j962cddf]
-jx:ifタグで囲むことで、条件を満たすときだけ出力される行...
-"test"に評価式を指定する。
-書式例
<jx:if test="${item.name == "すずき"}">
鈴木?
</jx:if>
***グループ化(アウトライン) [#i1842b71]
-幾つかの行の表示/非表示を切り替えるアウトライン機能を適...
-jx:outlineタグを用いる。
-非表示が初期状態。
-書式
<jx:outline>
見ないでください
</jx:outline>
**テンプレートの記法(POIオブジェクト使用) [#xee7af4f]
-使用可能オブジェクト
|workbook|カレントのorg.apache.poi.ss.usermodel.Workbook...
|sheet|カレントのorg.apache.poi.ss.usermodel.Sheetオブジ...
|hssfRow|カレントのorg.apache.poi.ss.usermodel.Rowオブジ...
-テンプレート処理後は、記したセルは空セルになる。印刷欄外...
***ヘッダーとフッター [#ub056945]
-ヘッダーやフッターに、${...}といった記述をしても評価の対...
-POIオブジェクトを利用してヘッダーやフッターの内容を動的...
-書式例(ヘッダー左の内容を変更する)
${sheet.getHeader().setLeft('Left Header')}
仮に、nameという引数があるなら下記のように指定する。
${sheet.getHeader().setLeft(name)}
-置換用記号を使ってExcelでお馴染みの設定ができる。
|~置換用記号|~Excelでの表記|~|
|&P|&[ページ番号]||
|&N|&[総ページ数]||
|&D|&[日付]||
|&T|&[時刻]||
|&F|&[ファイル名]||
|&A|&[シート名]||
-フォント設定などは直接記述する。
${sheet.getFooter().setLeft('&"HGP教科書体,メディウム 斜体"&...
-手でフッタヘッダを作成した後に getLeft()などの取得メソッ...
***ワークシートの名前を変える [#t1fcd491]
-workbook.setSheetNameメソッドを使用する。
-第1引数はシート番号、第2引数は変更する名前。
-シート番号はゼロ開始。
${workbook.setSheetName(0, '新しい名前')}
***アクティブシートの変更 [#j2eff754]
-workbook.setActiveSheetメソッドを使用する。
-シート番号はゼロ開始。
${workbook.setActiveSheet(1)}
***ワークシートの削除 [#i9ef12d8]
-workbook.removeSheetAtメソッドを使用する。
-シート番号はゼロ開始。
${workbook.removeSheetAt(1)}
***シート選択で最初に表示されるシートを指定 [#hb657802]
-Excelでシート下部に表示されるシート選択用のタブについて...
-workbook.setFirstVisibleTabメソッドを使用する。
-シート番号はゼロ開始。
${workbook.setFirstVisibleTab(1)}
***シート並び順の変更 [#h7c0519d]
-workbook.setSheetOrderメソッドを使用する。
-第1引数は移動対象となるシートの名前、第2引数は移動先。
-移動先は、どのシートの前に挿入するか、で指定。シート番号...
${workbook.setSheetOrder(workbook.getSheetName(0),2)}
***シートの拡大率 [#n1a22816]
-sheet.setZoomメソッドを使用する。
-第1引数÷第2引数=拡大率、となる。75%なら3と4。150%なら...
${sheet.setZoom(3,4)}
POIについてはコチラの書籍が参考になります。
#htmlinsert(amazon,transitional,"asins=4899773080")
良かったらポチってください。
***強制改ページの設定 [#f60d873d]
-sheet.setRowBreak、sheet.setColumnBreakメソッドを使用す...
-テンプレート処理中の行で設定されるため、forEachなどで行...
${sheet.setRowBreak(item.id/12*30)}
**気づいたことなど [#neca1d50]
-オートシェイプについて
--jXLSで処理して行数などが変わっても位置は動きません。Exc...
--jXLSでループ展開の影響を受けません。上記と被りますが、...
-改ページについてもループ展開されません。テンプレートに設...
-jXLSのループ処理はコレクションありきなので、n回分の生成...
-シートの保護などもテンプレート処理後も引き継いでくれる。...
**リンク [#b91ebd07]
:http://www.playframework.org/modules/excel|公式サイトに...
:http://jxls.sourceforge.net|excelのテンプレートファイル...
:http://ameblo.jp/kozake/entry-11110864557.html|「システ...
:http://groups.google.com/group/play-framework|GoogleのPl...
終了行:
[[Play framework]]
*Excel出力 [#o61376aa]
Excel出力機能を実装するためのモジュールが公開されているの...
jXLSはApacheプロジェクトのPOIを含んだツールで、効率的に帳...
xlsx形式への対応済。
jXLS自体には、POIを直接たたく術があるため、細やかな装飾を...
1つのシートを元にを複数のシートを増産することも非対応。こ...
**目次 [#i37447d0]
#contents
**インストール [#la224b31]
モジュールのインストールはコマンドラインから簡単に行える...
> play install excel-1.2.3
バージョンに'x'がついているものは、xlsx形式に対応したバー...
ノーマル版が3MBに対し、xlsx対応版は18MBあるため(公式ペー...
今回はxlsx形式を扱う予定が無かったので、ノーマル版とした。
+/modules配下に、excel-1.2.3というフォルダが作られる。
+README.textileを見ると、application.confに下記の設定を加...
module.Excel=${play.path}/modules/Excel
excel.template.root=app/views
+代わりにプロジェクトの依存性を管理するファイル、conf/dep...
# Application dependencies
require:
- play
- play -> excel 1.2.3
そして、コマンドプロンプトより依存性解決を指示する。
> play dependencies [アプリ名]
アプリフォルダ内に、modulesフォルダが作成される。
+eclipseで開発する場合はプロジェクトファイルを再生成する。
> play ec [アプリ名]
**使い方 [#ka4b2f9e]
-仕組みとしては、事前に用意したエクセルファイルをテンプレ...
-テンプレートの書き方は下記の[[リンク>#b91ebd07]]を参照。
-テンプレートは、viewsフォルダ配下のhtmlと同じように配置...
-Excel出力する場合は下記のように、リクエストフォーマット...
public static void excelOut1()
{
request.format = "xls";
String __FILE_NAME__ = "sample.xls";
String name = "田中";
render(__FILE_NAME__, name);
}
render()が呼ばれると、呼び元のメソッド名から「excelOut1.x...
**テンプレートの記法 [#k632a33a]
***変数の受け渡し [#h25069a7]
-render()で渡される第2引数以降は、htmlのテンプレート処理...
-Mapオブジェクトの要素へのアクセスは、ドットを用いる。
public static void excelOut1()
{
request.format = "xls";
String __FILE_NAME__ = "sample.xls";
String name = "田中";
Map obj = new HashMap();
Map obj2 = new HashMap();
obj.put("name", "すずき");
obj.put("address", "東京都");
obj2.put("name", "さとう");
obj2.put("address", "さいたま");
obj.put("omake", obj2);
render(__FILE_NAME__, name, obj);
}
これに対し用意したテンプレートはこちら。
#ref(1.png)
これらを基に出力されたExcelがこちら。
#ref(2.png)
気づきましたか? 4行目の記述で${obj.&color(red){okame};.n...
-「=10*5」という内容の文字列を渡した場合、式を評価する前...
-A1セルに ${value1}、A2セルに ${value2}として、A3セルに「...
***数式の埋め込み [#e6ef2b51]
-$[ ]を用いる。
-カッコ内に記述した式がそのまま出力される。$[10+5]とすれ...
-セル同士の演算も同じ。$[A1+A2+A5]とすれば、「=A1+A2+A5」...
-SUMなどの関数も同様。繰返し処理で増えるセルの場合であっ...
***繰返し処理 [#i5cb99be]
-jx:forEachタグを用いると、コレクションを繰返し表示するよ...
-jx:forEachタグでいくつかの行を挟み、挟まれた行が繰返し処...
-書式
<jx:forEach items="${コレクション名}" var="処理用の名前">
繰返したい行を挟む
</jx:forEach>
***繰返し処理+グループごと [#j932927f]
-jx:forEachタグで "groupBy" を用いると、指定したプロパテ...
-書式
<jx:forEach items="${コレクション名}" groupBy="グループ...
${group.item.グループ化したいプロパティ名}でグルー...
<jx:forEach items="${group.items}" var="処理用の名前">
繰返したい行を挟む
</fx:forEach>
</fx:forEach>
-抽出されるグループの出力順は、コレクションに格納されてい...
***繰返し処理+フィルタ [#r3402891]
-jx:forEachタグでコレクションを処理するに当たり、条件を満...
-"select" を使用する。
-書式例
<jx:forEach items="${items}" var="item" select="${item.a...
***繰返し処理+カウンタ [#y3b2be3e]
-jx:forEachタグでコレクションを処理するに当たり、何番目の...
-ゼロスタート。必要なら+1しよう。
-書式例
<jx:forEach items="${items}" var="item" varStatus="x">
${x.index +1}番目の処理です。
</jx:forEach>
***条件 [#j962cddf]
-jx:ifタグで囲むことで、条件を満たすときだけ出力される行...
-"test"に評価式を指定する。
-書式例
<jx:if test="${item.name == "すずき"}">
鈴木?
</jx:if>
***グループ化(アウトライン) [#i1842b71]
-幾つかの行の表示/非表示を切り替えるアウトライン機能を適...
-jx:outlineタグを用いる。
-非表示が初期状態。
-書式
<jx:outline>
見ないでください
</jx:outline>
**テンプレートの記法(POIオブジェクト使用) [#xee7af4f]
-使用可能オブジェクト
|workbook|カレントのorg.apache.poi.ss.usermodel.Workbook...
|sheet|カレントのorg.apache.poi.ss.usermodel.Sheetオブジ...
|hssfRow|カレントのorg.apache.poi.ss.usermodel.Rowオブジ...
-テンプレート処理後は、記したセルは空セルになる。印刷欄外...
***ヘッダーとフッター [#ub056945]
-ヘッダーやフッターに、${...}といった記述をしても評価の対...
-POIオブジェクトを利用してヘッダーやフッターの内容を動的...
-書式例(ヘッダー左の内容を変更する)
${sheet.getHeader().setLeft('Left Header')}
仮に、nameという引数があるなら下記のように指定する。
${sheet.getHeader().setLeft(name)}
-置換用記号を使ってExcelでお馴染みの設定ができる。
|~置換用記号|~Excelでの表記|~|
|&P|&[ページ番号]||
|&N|&[総ページ数]||
|&D|&[日付]||
|&T|&[時刻]||
|&F|&[ファイル名]||
|&A|&[シート名]||
-フォント設定などは直接記述する。
${sheet.getFooter().setLeft('&"HGP教科書体,メディウム 斜体"&...
-手でフッタヘッダを作成した後に getLeft()などの取得メソッ...
***ワークシートの名前を変える [#t1fcd491]
-workbook.setSheetNameメソッドを使用する。
-第1引数はシート番号、第2引数は変更する名前。
-シート番号はゼロ開始。
${workbook.setSheetName(0, '新しい名前')}
***アクティブシートの変更 [#j2eff754]
-workbook.setActiveSheetメソッドを使用する。
-シート番号はゼロ開始。
${workbook.setActiveSheet(1)}
***ワークシートの削除 [#i9ef12d8]
-workbook.removeSheetAtメソッドを使用する。
-シート番号はゼロ開始。
${workbook.removeSheetAt(1)}
***シート選択で最初に表示されるシートを指定 [#hb657802]
-Excelでシート下部に表示されるシート選択用のタブについて...
-workbook.setFirstVisibleTabメソッドを使用する。
-シート番号はゼロ開始。
${workbook.setFirstVisibleTab(1)}
***シート並び順の変更 [#h7c0519d]
-workbook.setSheetOrderメソッドを使用する。
-第1引数は移動対象となるシートの名前、第2引数は移動先。
-移動先は、どのシートの前に挿入するか、で指定。シート番号...
${workbook.setSheetOrder(workbook.getSheetName(0),2)}
***シートの拡大率 [#n1a22816]
-sheet.setZoomメソッドを使用する。
-第1引数÷第2引数=拡大率、となる。75%なら3と4。150%なら...
${sheet.setZoom(3,4)}
POIについてはコチラの書籍が参考になります。
#htmlinsert(amazon,transitional,"asins=4899773080")
良かったらポチってください。
***強制改ページの設定 [#f60d873d]
-sheet.setRowBreak、sheet.setColumnBreakメソッドを使用す...
-テンプレート処理中の行で設定されるため、forEachなどで行...
${sheet.setRowBreak(item.id/12*30)}
**気づいたことなど [#neca1d50]
-オートシェイプについて
--jXLSで処理して行数などが変わっても位置は動きません。Exc...
--jXLSでループ展開の影響を受けません。上記と被りますが、...
-改ページについてもループ展開されません。テンプレートに設...
-jXLSのループ処理はコレクションありきなので、n回分の生成...
-シートの保護などもテンプレート処理後も引き継いでくれる。...
**リンク [#b91ebd07]
:http://www.playframework.org/modules/excel|公式サイトに...
:http://jxls.sourceforge.net|excelのテンプレートファイル...
:http://ameblo.jp/kozake/entry-11110864557.html|「システ...
:http://groups.google.com/group/play-framework|GoogleのPl...
ページ名: