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アプリとの相性はよさそうだ。

このエントリーをはてなブックマークに追加

関連記事

スマートスピーカーはもう終わったデバイス?

QMK FirmwareとRaspberry Pi PicoでSPLIT_USB_DETECTを使わない方法

40%キーボードに慣れるためにやったこと

Lunakey PicoでQMK Firmwareを動かしてみました

Googleアシスタント向け会話型アクションが1年後にシャットダウンされます