- - PR -
CSVダウンロード時にExcelでうまく表示されない
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-01 20:25
CSVをダウンロードする機能を作っているのですが、
ダウンロードダイアログで「開く」を押した際に、 表示されたCSVがうまくセルに分かれず、 一つのセル内にカンマ区切りで1行のデータが表示されてしまいます。 解決策をご存知の方がおられましたら、ご教授願います。 【実装方法】 Servletにて、JSPを呼び出し、 そのJSP内で下記のようにContent-Type,Content-Disposition を指定しています。 <%@ page language="java" contentType="application/download; charset=Shift_JIS" buffer="none"%> <% response.setHeader("Content-Disposition", "inline; filename=\"test.csv\""); %>"aa","bb","cc","dd","ee" ダウンロードダイアログで 「開く」を押した時、"aa"、"bb"は違うセルで表示されて欲しいのですが、 1つのセル内に、"aa","bb","cc","dd","ee"が表示されてしまいます。 ダウンロードダイアログで「保存」を押して一度ローカルに保存し、 再度Excelで開いた場合には、うまくセルに分かれて表示されます。 以上、よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2004-07-02 09:51
カンマ区切りではなく、TAB区切りではどうですか?
| ||||||||||||
|
投稿日時: 2004-07-02 10:10
JSP がどんな Servlet に変換されているか確認できますか?
多分、スクリプトレットで ServletResponse#setHeader を実行する前に ServletResponse#getPrintWriter を実行してしまっているんだと思います。 | ||||||||||||
|
投稿日時: 2004-07-02 10:37
私がやってみたところうまく表示されましたが
... [ メッセージ編集済み 編集者: MUSE 編集日時 2004-07-02 10:46 ] | ||||||||||||
|
投稿日時: 2004-07-02 11:34
調べ直しましたら javax.servlet.jsp.JspWriter の仕様として
とありますから前の記述は間違いです。 ごめんなさい。 | ||||||||||||
|
投稿日時: 2004-07-02 11:43
MMXさん、顔爺さん、MUSEさん、ご返答ありがとうございます!
MMXさん> TAB区切りにした所、うまくセルで分かれるようになりました! ただ、お客さんから要求された仕様が「カンマ区切り」なので、 カンマ区切りで実現させたいのです。。 でも、TAB区切りにすることを提案する、というのは最終手段としたいと思います。 ありがとうございます! 顔爺さん> ServletResponse#getPrintWriterメソッドはServlet内に見当たらなかったのですが、 ServletResponse#setHeaderする前に、PageContext#getOutしてました。 こうなっていました ↓
でも、PrintWriterオブジェクトが作成されるのはバッファがフラッシュされた後ってことは、 setHeaderするタイミングは問題ないってことですよね? (よく分かってなくってすみません。。) PrintWriterの仕様も調べてくださって、 本当にありがとうございます!! MUSEさん> 試してくださってありがとうございます! 環境は、 サーバ:TurboLinux+Apache+Tomcat4.0.6 クライアント:Windows2000+IE6.0 です。 | ||||||||||||
|
投稿日時: 2004-07-02 12:03
ただ、buffer="none" を指定した場合、バッファがないので
が該当するのかもしれません。あとは、「必要に応じて」の解釈の問題になりますが、 よくわかりません。 | ||||||||||||
|
投稿日時: 2004-07-05 17:53
自己レスです。
Content-typeが間違っているのかも!と思い、 "text/x-csv; charset=Shift_JIS"や、"application/x-csv; charset=Shift_JIS" を設定してみましたが、現象は変わりませんでした。 更に調べたところ、 「IEでは、ファイルの種類を特定するのに、Content-typeを用いるのではなく、リクエスト(HTTPリクエスト)を見てファイルの種類を特定しようとする」 という記述をいくつか見つけました。 そこで、HTTPリクエストを送る際に、それまで、 〜/TestServlet?param1=AAA¶m2=BBB.... としていた所を、 〜/TestServlet.csv?param1=AAA¶m2=BBB.... のようにURIの最後に「.csv」を付けた所、 正常にCSVデータがセルに分けられて表示されるようになりました。 今回はこれで対応してみようと思います。 | ||||||||||||
1
