SeasarプロジェクトでExcelファイルを出力する方法[出力編]
前回は「Fisshplate」を使用するための準備を行った。
今回は「Fisshplate」を利用して、実際にExcelファイルを出力する手順を紹介する。
1.Excelテンプレートにデータを渡すためのDTOを定義する
2.インターフェースを定義する
3.Excelテンプレートを作成する
4.creator.diconにFisshplateCreatorを登録する
5.Excelファイルを出力する
1.Excelテンプレートにデータを渡すためのDTOを定義する
Excelテンプレートにデータを渡すためのDTOを「dto」パッケージの配下に作成する。publicフィールドはサポートされていないので、privateフィールドに「getter」「setter」を作成する。
package jp.co.smp.excel.dto; import java.util.Date; public class SampleDto { private String customerNo; //顧客番号 private String customerName; //顧客名 private String tradeNo; //取引番号 private String contact; //担当者 private Date date; //発行日 private int total; //請求額 public String getCustomerNo() { return customerNo; } : : getter、setter以下省略 : }
2.インターフェースを定義する
2-1.ルートパッケージ配下に「fpao」パッケージを作成する
(fpaoは「Fisshplate Access Object」の略です)
2-2.インターフェースを作成する
ポイントは下記の通り。
- 2-1で作成したパッケージに作成する
- インターフェース名は「Fpao」で終えること
- インターフェースのメソッドの戻り値は、「HSSFWorkbook」にすること
- インターフェースの引数に1で作成したDTOを指定すること
- インターフェースのメソッド名がExcelテンプレートのファイル名の一部となる
package jp.co.smp.excel.fpao; import jp.co.smp.excel.dto.SampleDto; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public interface SampleFpao { HSSFWorkbook sampleTemplate(SampleDto dto); }
2-3.作成したインターフェースをapp.diconにコンポーネントとして登録する
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="convention.dicon"/> <include path="aop.dicon"/> <include path="j2ee.dicon"/> <include path="s2jdbc.dicon"/> <!-- ↓↓↓ 追加部分 ↓↓↓ --> <include path="s2fisshplate.dicon"/> <component class="jp.co.smp.excel.fpao.SampleFpao" > <aspect>fisshplate.interceptor</aspect> </component> <!-- ↑↑↑ 追加部分 ↑↑↑ --> <component name="actionMessagesThrowsInterceptor" class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/> </components>
3.Excelテンプレートを作成する
ポイントは下記の通り。
- ファイル名は「インターフェース名_メソッド名.xls」とする(SampleFpao_sampleTemplate.xls)
- Excelテンプレート内では、DTOのプロパティは「data」という名前で参照できる
- 日付や金額等の書式はExcelテンプレート上で設定しておく
- Excelテンプレートファイルはインターフェースを同じパッケージに配置する
4.creator.diconにFisshplateCreatorを登録する
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="convention.dicon"/> <include path="customizer.dicon"/> <component class="org.seasar.framework.container.creator.ActionCreator"/> <component class="org.seasar.struts.creator.FormCreator"/> <component class="org.seasar.framework.container.creator.ServiceCreator"/> <component class="org.seasar.framework.container.creator.DtoCreator"/> <component class="org.seasar.framework.container.creator.InterceptorCreator"/> <component class="org.seasar.framework.container.creator.DaoCreator"/> <!-- ↓↓↓ 追加部分 ↓↓↓ --> <component class="org.seasar.fisshplate.creator.FisshplateCreator" /> <!-- ↑↑↑ 追加部分 ↑↑↑ --> </components>
※サーバ開始時にエラー「org.seasar.framework.container.TooManyRegistrationRuntimeException」が発生する場合は、この設定を行う前の状態に戻してみて下さい。
5.Excelファイルを出力する
IndexAction.java
package jp.co.smp.excel.action; import java.io.FileOutputStream; import java.util.Date; import javax.annotation.Resource; import jp.co.smp.excel.dto.SampleDto; import jp.co.smp.excel.fpao.SampleFpao; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.seasar.struts.annotation.Execute; public class IndexAction { @Resource protected SampleFpao sampleFpao; @Execute(validator = false) public String index() { return "index.jsp"; } @Execute(validator = false) public String createExcel(){ //データ作成 SampleDto dto = new SampleDto(); dto.setContact("担当者の名前"); dto.setCustomerNo("c0001"); dto.setCustomerName("顧客の名前"); dto.setTradeNo("2013008028"); dto.setDate(new Date()); dto.setTotal(5680); //Excelテンプレートにデータを埋め込む HSSFWorkbook wb = sampleFpao.sampleTemplate(dto); //ファイルに保存する try { FileOutputStream out = new FileOutputStream("C:\\temp\\sampleExcel" + System.currentTimeMillis() + ".xls"); wb.write(out); out.close(); } catch (Exception e) {} return null; } }
index.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Excel output</title> </head> <body> <s:form> <input type="submit" name="createExcel" value="Excel出力" /> </s:form> </body> </html>
実行結果
フォルダ「C:\temp」に「sampleExcel13xxxxxxxxxxx.xls」が出力される。
<関連記事>
SeasarプロジェクトでExcelファイルを出力する方法【準備編】
SeasarプロジェクトでExcelファイルを出力する方法【出力編】
SeasarプロジェクトでExcelファイルを出力する方法【ダウンロード編】
SeasarプロジェクトでExcelファイルを出力する方法【明細編】
<お勧め書籍>