- PR -

Jakarta POI でwriteしたExcelファイルが開けません

投稿者投稿内容
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2007-04-03 15:30
インギさん

何度もレスポンスをありがとうございます。

引用:

インギさんの書き込み (2007-04-03 15:19) より:
forward する前にレスポンスに何か大量に書き出していたり、レスポンスをコミットしていたりしないでしょうか?



ソースとしては下のとおりで
public void outputExcel(
 ActionMapping mapping,
 ActionForm form,
 HttpServletRequest request,
 HttpServletResponse response) throws Exception {

 // Excelテンプレートファイル名(フルパス)の取得
 String templateFile =
  this.getServlet().getServletContext().getRealPath("/WEB-INF/lib/TEST_format.xls");

 // Excel出力処理
 ※ここでビジネスロジックを実行し、テンプレート(xls)に値を格納しています。

 // ダウンロード
 String fileName = "TEST_" + new SimpleDateFormat("yyyyMMdd").format(new Date()) +
 "_" + new SimpleDateFormat("HHmmss").format(new Date()) + ".xls";

 response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
 response.setContentType("application/vnd.ms-excel");

 workbook.write(response.getOutputStream());
 response.getOutputStream().close();
}

となっていますが、ここでresponse.setContentType()はレスポンスをコミットする、という
ことになっているのでしょうか?

初歩的な質問で申し訳ありません。

[ メッセージ編集済み 編集者: hiro 編集日時 2007-04-03 15:35 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-03 16:06
会議室を検索するといくつかひっかかりますが、レスポンスがコミットさ
れるのは flush を呼び出した場合やバッファが溢れた場合などです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20765&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25814&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35808&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37076&forum=12

outputExcel を呼び出す前、forward する前です。
ちなみにこの現象は POI とも関係がなく、outputExcel 内でテキストを書き出しても同じ現象が発生すると思います。
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2007-04-09 11:28
Excelファイルを一時的にサーバー上に作成し、それを
ダウンロードすることで回避しました。
(サーバー(SunOS)→ローカル(Win)のwriteがダメな原因が
 解決しなかったのですが…)

インギ様、何度もアドバイスいただきありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)