JExcelApiとWebアプリの相性は?
Webアプリでは,Webブラウザにダウンロードさせたい情報を,一旦サーバ内でファイルとして作成し,それをWebブラウザに対して送信したりする。この場合,セッションが無効になるタイミングなどで,不要になったサーバ内のファイルを削除しなければならない。完全にファイルを削除することはできないため,ごみファイルが残ってしまうこともしばしばだ。さて,あるWebアプリにおいて,Excelファイルを自動生成してWebブラウザに返却する処理が存在すると仮定する。この場合,まず思いつくことは,POIやJExcelApiなどのツールを使ってExcelファイルを生成し,ServletやJSP,StrutsのActionなどでHttpServletResponseから得た出力ストリームに対して,Excelファイルを読み込んで出力ストリームに送信,というパターンだろう。しかし,JExcelApiを使えば,一時的にファイルを生成する必要はない。
public class ExcelDownloadAction extends Action {
public ActionForward execute(…, HttpServletResponse response) {
…
WorkbookSettings ws = new WorkbookSettings();
ws.setLocale(new Locale(“ja”, “JP”);
ws.setEncoding(“Windows-31J”);
OutputStream os = response.getOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(os, ws);
// workbookに対してシート作成&内容作成
workbook.write();
workbook.close();
…
return null;
}
}
WritableWorkbookオブジェクトを,HttpServletResponseから得た出力ストリームを基に生成する。これによって,writeメソッドの実行の結果が出力ストリームに直接出力される。ワークブックの生成が,全てメモリ上で行われるようになるので,ファイルの後始末などを考える必要もなく,しかもサーバリソースに優しい。
POIでこれができるかどうかは,POIをやったことないのでわからない。少なくとも,JExcelApiはWebアプリとの相性はよさそうだ。