- PR -

CSVダウンロード後について

投稿者投稿内容
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2006-10-20 11:14
初めまして、YOSHIと申します。
開発環境(兼クライアント): WINDOWS XP .NET2003 VB.NET
SERVER: WINDOWS 2000 FreameWork 1.1 で開発を行っています

CSVを別画面にてダウンロード後にそのままファイルを開いているのですが、何点か不具合があります。

1点目は、カンマ区切りを正しくしているのにEXCELで開いた際、全ての行がAのセルにまとまってしまいます。
2点目は、クライアントによって、ダウンロードを行った際に「開く・保存・キャンセル」のダイアログボックスが表示される場合と、ダイアログボックスが表示されずに直接開きます。「inline」で開いているので、直接開くものだと思っていたのですが、なぜかクライアントによってわかれてしまうみたいです。

ソースは以下の通りです。

Dim eFileName As String = System.Web.HttpUtility.UrlEncode(FILENAME)
Response.AppendHeader("Content-Disposition", "inline;filename=" & eFileName)
Response.ContentType = "application/octet-stream"
Response.ContentEncoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim fileDL As System.IO.FileInfo = New System.IO.FileInfo(FULL_FILENAME)
Response.WriteFile(fileDL.FullName)
Response.Flush()
Response.Close()

aspxファイルは「method」を「method=get」にしてあります。

サーバー上のダウンロードするファイルを直接メモ張で開くと、「"」などはついていませんでしたし、カンマもついていました。

もしかすると、EXCEL側の設定やクライアントのセキュリティの設定なのかもしれませんが、どうしてもうまくいかなく困っております。
どうかみなさんの知恵をお貸しください。よろしくお願いします。
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-20 11:32
それはexcelだから
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2006-10-20 13:45
引用:

ぷさいくろうさんの書き込み (2006-10-20 11:32) より:
それはexcelだから



ぶさいくろう様、お早い回答ありがとうございます。

EXCEL側でしたか・・・。でしたら、ここで質問するのはお門違いですね。申し訳ありませんでした。もう少し、いろいろと試してみます。
試してもダメでしたら、EXCEL側でAセルを区切り文字毎に区切るという機能を使っていただく事にします。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-10-20 15:18
引用:

YOSHIさんの書き込み (2006-10-20 11:14) より:
Dim eFileName As String = System.Web.HttpUtility.UrlEncode(FILENAME)
Response.AppendHeader("Content-Disposition", "inline;filename=" & eFileName)
Response.ContentType = "application/octet-stream"
なさんの知恵をお貸しください。よろしくお願いします。


FILENAMEは*.csvなんですよね?ContentTypeを「text/comma-separated-values」にしたら・・やっぱりダメかなぁ(汗)。

#私のPCはCSVファイルをエディタで開くようにしてるので検証できない(苦笑)。
Tasuku
大ベテラン
会議室デビュー日: 2006/09/14
投稿数: 106
お住まい・勤務地: tokyo
投稿日時: 2006-10-20 16:04
1点目:
いったんクライアントのローカルに保存して、そのファイルを開くと問題なく開ける。
というのは経験したことがあります。
解決策は見つからず、これを回避策として私は諦めました...

2点目:
(普通の)エクスプローラ→ツール→フォルダオプションで、拡張子ごとに
「ダウンロード後に開く確認をする」を設定できたと思います。
設定してもだめなときもあるみたいですが。
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2006-10-20 17:00
引用:

shimixさんの書き込み (2006-10-20 15:18) より:
FILENAMEは*.csvなんですよね?ContentTypeを「text/comma-separated-values」にしたら・・やっぱりダメかなぁ(汗)。


ファイルの名前は「*.csv」です(すいません、書き忘れてました)
ContentTypeを変えてみましたが、やはり変わりませんでした。
同じように、IE上でEXCELを開き、内容は分割されませんでした。
引用:

Tasukuさんの書き込み (2006-10-20 16:04) より:
1点目:
いったんクライアントのローカルに保存して、そのファイルを開くと問題なく開ける。
というのは経験したことがあります。
解決策は見つからず、これを回避策として私は諦めました...

2点目:
(普通の)エクスプローラ→ツール→フォルダオプションで、拡張子ごとに
「ダウンロード後に開く確認をする」を設定できたと思います。
設定してもだめなときもあるみたいですが。


1点目は、確かにローカルに保存して、別途開けば問題が無いようでしたので、回避策として考えます。
そのためには、必ずダイアログボックスを表示しなければならないため、2点目を重視する事にします。

2点目は、Tasukuさんがおっしゃっている、設定はクライアント毎行う設定なのでしょうか。できれば、サーバー側の設定やアプリで対応したいので、他の手法を考えます。

私が今日いろいろと試してみた結果は、
Response.ContentType = "application/octet-stream"
の部分を
Response.ContentType = "application/octet-stream-Dummy"
に変更して、無理やりダイアログボックスを出すことに成功しました。
OSによっては、Tasukuさんの通りにしないとダイアログボックスが表示しないものありましたが・・・。Win2000のIE6だと、inlineなのにIEとは別でEXCELが立ち上がってしまったり、ダイアログボックスが表示されたりしました。WinXP-SP2 IE6だと問題ないみたいです。
まぁ今回は、XP向けということで2000は考慮しない事にします。

みなさんいろいろと回答ありがとうございました。根本的な解決は完璧ではありませんが、回避策は見つかりましたので、そちらを使おうと思います。
本当にありがとうございました。
(もう少しはいろいろと試してみます)
Tasuku
大ベテラン
会議室デビュー日: 2006/09/14
投稿数: 106
お住まい・勤務地: tokyo
投稿日時: 2006-10-21 00:29
ズバリっぽい記事を見つけました
http://bbs.hotfix.jp/ShowPost.aspx?PostID=1830

1点目:
Content-Disposition: attachment;filename=〜
にするみたいです

2点目:
.xls のファイルタイプ設定も見ないといけないみたいです
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2006-10-23 11:59
引用:

Tasukuさんの書き込み (2006-10-21 00:29) より:
ズバリっぽい記事を見つけました
http://bbs.hotfix.jp/ShowPost.aspx?PostID=1830

1点目:
Content-Disposition: attachment;filename=〜
にするみたいです

2点目:
.xls のファイルタイプ設定も見ないといけないみたいです



返事が遅くなり申し訳ありません。

Tasuku様何度もありがとうございます。
1点目に関して、別画面を開いて「attachment」を指定した場合、開く・保存・キャンセルの保存を押下した際に、画面が閉じず残ってしまうため、「inline」で行っているのです。説明不足で申し訳ありません。
(わざわざ別画面でする必要がないのでは?という意見はあるのですが、今回の仕様で決まっているので、考慮しないことにしています)
2点目に関して、変更してみるとダイアロボックスが出るようになりました。ありがとうございます。
しかし、この設定ってクライアントによってまちまちなのでしょうか・・・。見た限り、.xlsの設定でチェック付いていないのは、5台中1台だけでしたが、デフォルトではチェックついているのかな。
結局は、クライアントの設定ということで、相手に言うだけで勝手に設定してもらう事になりました。

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