• ベストアンサー
  • すぐに回答を!

ファイルダウンロードの開くで、CSVファイルが開けない

  • 質問No.1573645
  • 閲覧数6707
  • ありがとう数5
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 10% (3/28)

表記の件についてかなり困っています。
教えてください。

【環境】
 Windows2000 SP4 + ASP
【内容】
 現在CSVファイルをダウンロードする仕組みをASPで作成しています。
とりあえず、ダウンロードダイアログがでてくるところまではでき、保存ボタンでも正常に保存できるところまではできたのですが、開くボタンをクリックすると、EXCEL(CSVをEXCELに関連付けしているため)が起動された後に、
”出力ファイル名[1].csv”が見つかりません。という
エラーとなり表示されません。

この原因は何なのでしょうか?
宜しくお願いします。

【ロジック】
ダウンロードロジックは以下のようにしています。

Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition","attachment; filename=光彩.csv"
strFilePath = "C:\Inetpub\wwwroot\CoreSt\光彩.csv"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing

質問者が選んだベストアンサー

  • 回答No.3
  • ベストアンサー

ベストアンサー率 66% (155/233)

すみません、私が聞きたかったのは、「もちろんダウンロードできません。」とおっしゃる部分、具体的にはどう言う状況なのか、です。
ダウンロードダイアログが表示され、ファイル名がおかしいだけで、なぜダウンロードできないのか、そのまま「OK」をクリックすると、エラー表示が出るのか、その表示内容は?、などが知りたかったのです。

いろいろ気になるところはありますが、とりあえず上記を教えていただけるでしょうか。
補足コメント
ks3662

お礼率 10% (3/28)

>また、「もちろんダウンロードできません。」も、ち>ょっと考えにくいです。ファイル名
>が「ListOut_asp」になってしまったとしても、なぜ
>ダウンロードできないのか、というより、ダウンロー>ドできないとは具体的にはどう言うことですか?エラ>ーが発生するということですか?
度々すみません。最初から順にお話いたします。
まず「ListOut_asp」のダウンロードですが、まず”保存”ボタンをクリックした場合は、次のMSGがでます。
『Internet Explorer では、ListOut.aspを開くことができません。 このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。』

また、”開く”ボタンをクリックした場合は、次のエラーとなり処理は終了します。
『エラー タイプ
ADODB.Stream (0x800A0BBA)
ファイルを開けませんでした。』

まずこの内容の回答でよろしかったでしょうか?
お手数ですが、宜しくお願い致します。
投稿日時:2005/08/16 21:34

その他の回答 (全5件)

  • 回答No.6

ベストアンサー率 66% (155/233)

ANo.5のコードを試していただいたのは、原因を絞るためで、つまりサーバー側、クライアント側のどちらに原因があるのかを限定するためのものでしたが、その結果を見る限り、どうやらクライアント側に原因があるようですね。

> ということは、OS,IEなどにより動作がことなるということなのでしょうか?

私が試したところ、WinXP、98、ME、IE5.5、IE6、すべて問題ありませんでした。
なので、そのテストした環境だけの問題なような気がします。

直接的な原因は、キャッシュ保存されていないことが原因です。
見ていないので勘でしかありませんが、単にブラウザの設定によるだけに思えます。
Cache-Controlのno-cacheというのは「キャッシュ保存するな」という指定ですので消したのですが、消したにも関わらず、何らの理由でキャッシュ保存されていないようです。
そうなるとブラウザ設定のほうでキャッシュ保存しないようになっているのでは。
たとえば、IEの設定で、インターネット一時ファイルを「自動的に確認する」に設定、あるいはディスク領域が足りているかどうか、など。
また、同じマシンで別のブラウザでも試されると、より原因が絞られると思います。
あと、成功したWin2000のほうのIEの設定と比べてみる、など。
お礼コメント
ks3662

お礼率 10% (3/28)

色々お教えいただきありがとうございました。

各種設定確認しまして、ご指摘の件に関しては
特におかしな点がみつかりませんでした。

更に探求を進めてみようと考えています。
ASPでの開発がまだ続きますので、また何かありましたら宜しくお願い致します。
この度は色々お世話になりました。ありがとうございました。
投稿日時:2005/08/22 02:26
  • 回答No.5

ベストアンサー率 66% (155/233)

サーバーのエラーや、ファイル名指定がおかしいとか、「要求されたサイトが~」などのエラーなどは、とりあえず全てなくなったということですね?
となると、出力に至る前の部分など、やはりごく単純なミスが原因のような気がしてしまいます。


以下で試すとどうですか?

※「C:\Inetpub\wwwroot\CoreSt\pp.csv」が存在し、エクセルで開けることを確認しておく

●ASP.Netの場合

<%
Dim strFilePath

strFilePath = "C:\Inetpub\wwwroot\CoreSt\pp.csv"

Response.AddHeader "Content-Disposition","attachment; filename=pp.csv"
Response.WriteFile strFilePath
%>

●ASP

<%
Dim objStream
Dim strFilePath
Const adTypeBinary = 1

strFilePath = "C:\Inetpub\wwwroot\CoreSt\pp.csv"

Response.AddHeader "Content-Disposition","attachment; filename=pp.csv"

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
%>

上記は、とりあえず出力部分のみを、つまり原因を限定することが目的のものですので、変更せずにこのまま試してみてください。


また、他のブラウザや、他のPCから(ネットを介して)ではどうでしょうか。
補足コメント
ks3662

お礼率 10% (3/28)

ご指摘頂いたソース<●ASP>をそのまま貼り付け
実行してみました。
するとクライアントによって以下のように動きが変化しました。

クアイアントがWinXP+SP2(IE6.0.29)の場合
これまでお話していた通りの現象(EXCELは起動されるのですが、エラーメッセージ【pp[1].csvが見つかりません】が出現します。)でした。

また、クライアントがWin2000(Server,Pro)+SP4(IE6.0.28)の場合
なんと正常にpp[1].csvがEXCELで起動され中身も正しいものが表示されました。

今回は全端末ともEXCEL2000で統一しております。

ということは、OS,IEなどにより動作がことなるということなのでしょうか?

度々申し訳ありません。
宜しくお願い致します。
投稿日時:2005/08/20 14:52
  • 回答No.4

ベストアンサー率 66% (155/233)

まず

> ADODB.Stream (0x800A0BBA)
> ファイルを開けませんでした。

というエラーは、ASP側、サーバー側のエラーですよね。
ファイルを開けない、ファイルが見つからないということではないでしょうか。
「ファイル名をASCII文字だけにする」というのは、クライアントにダウンロードさせるファイルであって、サーバーがディスクから読み込むファイルではありません。
「pp.csv」に変更されたときに、

strFilePath = "C:\Inetpub\wwwroot\CoreSt\光彩.csv"

ここも変えてしまいませんでしたか?  ↑
あるいは、変えたなら当然、実際のディスク上のファイル「光彩.csv」も「pp.csv」という名前にリネームしておかなければなりません。

> Internet Explorer では、ListOut.aspを開くことができません

というエラーは、単にクライアント側で拡張子「asp」に関連付けられたアプリがないということでしょう。
また、

> このインターネットのサイトを開くことができませんでした

というエラーも、前述のようにサーバーが正しくファイルデータを返せないためです。
つまり、ダウンロードダイアログに表示されるファイル名の問題も、エラー表示も、そもそもそこまで行く前(ファイル読み込み)の時点でエラーが起きて、ヘッダも何も意味がなかった、というだけな気がします。


質問分に載せているコードを、

~attachment; filename=光彩.csv

という部分を、

~attachment; filename=pp.csv

に変更し、実際にサーバーのディスク上にあるファイル名を、

strFilePath = "C:\Inetpub\wwwroot\CoreSt\★"

↑この部分に入れて、実行してみてください。
また、先から出ているキャッシュの問題も、あわせて反映させ(Cache-Control:no-cache を書かない)、さらにクライアント側のディスクキャッシュを一度クリアしてみてはどうでしょうか(C:\WINDOWS\Temporary Internet Files の中をクリア)。
補足コメント
ks3662

お礼率 10% (3/28)

度々ありがとうございます。
以下にご指摘に従い修正したロジックを転記します。
****ロジック開始****
'Response.AddHeader "Cache-Control", "no-Cache"
Response.CharSet = "Shift_Jis"
    
filename = "c:\Inetpub\wwwroot\CoreSt\pp.csv"
Set fsobj = CreateObject("Scripting.FileSystemObject")
Set tsObj = fsobj.CreateTextFile(filename,true)

  <filenameへCSV出力(長文のため省略)>
tsObj.Close()

Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition","attachment; filename=pp.csv"
strFilePath = filename ←実際に上で設定したフルパスが入っていることは確認済み
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath
Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing
response.end

****ロジック終了****
この内容と伴に、クライアント側のディスクキャッシュのクリアを実施しました。(c:\windows\temp\
Temporary Internet Files & IEのインターネットオプションのインターネット一時ファイルの削除を実施)

結果動作に変わりはありませんでした。(Excelが起動された後、pp[1].csvが見つかりませんというエラー)

他に心当りありますでしょうか?宜しくお願い致します。
投稿日時:2005/08/19 10:06
  • 回答No.2

ベストアンサー率 66% (155/233)

最も気になるのは、

> ファイル名を”pp.csv”等日本語を使用しないパターンにした場合、ダウンロ
> ードダイアログで表示されるダウンロード対象ファイル名が、ロジック記述し
> ているソース名(ListOut_asp)となってしまいます。(もちろんダウンロー
> ドできません。)

「filename=~」を変えただけで、ダイアログのファイル名がおかしくなってしまうというのは、ちょっと考えられません。何か他も変えてませんか?
また、「もちろんダウンロードできません。」も、ちょっと考えにくいです。ファイル名が「ListOut_asp」になってしまったとしても、なぜダウンロードできないのか、というより、ダウンロードできないとは具体的にはどう言うことですか?エラーが発生するということですか?

それともうひとつ。

> no-Cacheを使用しない。また、inlineを指定すると、ブラウザにCSVがEXCELイ
> メージで表示されてしまうため

「Cache-Control:no-cache 」を使用しないだけでは、上記現象にはなりませんよね? inline を指定した場合だと思います。
以下のような書式になっていれば良いとおもいます。

Content-Disposition: inline; filename=pp.csv

参照URLには、「キャッシュを制限しないことで問題を回避できる」とありますので、この点を確認してはどうでしょうか。

私も試してみたところ、キャッシュを制限していると、確かに、ダウンロードダイアログボックスで、「保存」を選ぶと問題なく、「開く」を選ぶとファイルが見つからない旨のエラーが表示されました。
ようするに、セッション内のみ有効となっているキャッシュが、「開く」の前処理の内部的なダウンロードが完了した時点で、削除されていることが原因だと思います。
キャッシュの制限をしなければ、問題なく開くことができました。
補足コメント
ks3662

お礼率 10% (3/28)

度々すみません。
>「filename=~」を変えただけで、ダイアログのファ
>イル名がおかしくなってしまうというのは、ちょっと>考えられません。何か他も変えてませんか?
>また、「もちろんダウンロードできません。」も、ち>ょっと考えにくいです。ファイル名が
>「ListOut_asp」になってしまったとしても、なぜダ
>ウンロードできないのか、というより、ダウンロード>できないとは具体的にはどう言うことですか?エラー>が発生するということですか?
ListOut.aspファイルに当ロジックをかいています。
この名前がなぜか「ListOut_asp」とダウンロードダイアログに表示されます。また、条件はやはりファイル名を、日本語名から、”pp.csv”にかえただけで現象が出てきます。(他は特に触っていません。)

実際の原因は、キャッシュの制限ではないかとのご指摘いただいた通りだと私も思い”no-cache”を指定しない(ダウンロード機能が必要な対象画面のみ)ことも試みましたが変化ありませんでした。
”no-cache”以外になにか指定したほうがよいのでしょうか?

あと、EXCELをダウンロードダイアログの出る前に既に起動している状態にすると”開く”で、目的のファイルがきっちり表示されるようです。これは何か関係あるのでしょうか?

色々記述し申し訳ありませんが、宜しくお願いします。
投稿日時:2005/08/16 02:04
  • 回答No.1

ベストアンサー率 66% (155/233)

日本語ファイル名をASCII文字だけにしてみると、どうでしょう。

http://support.microsoft.com/default.aspx?scid=kb;ja;436616

あるいはCache-Controlが関係しているとか。

http://support.microsoft.com/?scid=kb;ja;436605&spid=2073&sid=269

ブラウザのキャッシュ(Temporary Internet Files)をクリアしてみると、どうでしょうか。
補足コメント
ks3662

お礼率 10% (3/28)

早速ありがとう御座います。
>あるいはCache-Controlが関係しているとか
上記内容について確認しましたが、事象は変わりませんでした。(no-Cacheを使用しない。また、inlineを指定すると、ブラウザにCSVがEXCELイメージで表示されてしまうため、要件と異なります。ダウンロードした後、EXCELで開いたイメージにしたいとのことでした。)
また、ファイル名を”pp.csv”等日本語を使用しないパターンにした場合、ダウンロードダイアログで表示されるダウンロード対象ファイル名が、ロジック記述しているソース名(ListOut_asp)となってしまいます。(もちろんダウンロードできません。)
最後にブラウザのキャッシュもクリアしてみましたが、特に変わりがありません。

他に心当たりありますでしょうか?
宜しくお願いします。
投稿日時:2005/08/11 23:12
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ