• ベストアンサー

ASPでCSVファイルを作成しダウンロードさせる

ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか? 手順 クライアント        サーバー あるURL(A.ASP)にアクセス              A.ASPのスクリプトでCSVフォーマットを作成              クライアントに送信(多分、Response.Writeで) ダウンロードダイアログが開く 「A.CSVをダウンロードしますか?」 のような感じ ダウンロード、またはExcelが開く というようなイメージです。 CSVファイルを作ってしまうと、複数のユーザーからほぼ同時に要求があった場合、望むCSVにならない可能性があり、また、毎回ファイル名を変えると、Webサーバー上にCSVファイルが沢山できてしまうため、何とかこの方法でやりたいのですが、何かよい方法はありませんでしょうか? ちなみに次のようなASPファイルをしてみましたが、うまくいきません。 <% Response.Content-Type="application/vnd.ms-excel" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> また、「vnd.ms-excel」を「oct-stream」でもだめでした。 何かよい知恵をお貸しください。

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

  • ベストアンサー
  • mkii
  • ベストアンサー率40% (43/105)
回答No.2

これでOK!です。 <% Response.AddHeader "Content-disposition", "filename=""motteke.csv""" Response.ContentType="text/csv" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> "text/csv"は適当です(笑)

msystem
質問者

お礼

ありがとうございます。 できました。 私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;) ところで、 Content-disposition; attachment;filename=motteke.csv という書き方もあるようですが、「attachment」はどうゆう物なのでしょうか? あるのとないのと、何か違いがあるのでしょうか?

その他の回答 (4)

  • mann555
  • ベストアンサー率46% (29/62)
回答No.5

ContentType,attachmentに関してはmkiiさんが解説しているので割愛します。 IEのBugはBinary Dataの時に発生するようですね。(5.5では出ないかも.....) ContentTypeを以下のようにすれば回避できます。 Response.ContentType = "application/octet-stream-dummy; name=file1.exe" IE以外の場合は Response.ContentType = "application/octet-stream; name=file1.exe"

msystem
質問者

お礼

IEのBugは、バイナリデータの時ですか。参考になります。 今は、まだ、バイナリデータのダウンロードは必要がないですが、将来のときのためにきっちり覚えておくようにします。 本当にありがとうございました。

  • mkii
  • ベストアンサー率40% (43/105)
回答No.4

ContentTypeに"text/csv"と適当ものを指定してることには理由があります。 IEなんかですと、ContentTypeをまともに見ないのでいいんですが、 Netscapeですと"text/plain"というまともなMIMEを指定すると、 ダウンロードのダイアログが出ず、ブラウザで表示してしまいます。 (IE5.5のSPなしでもバグがあったような) Content-dispositionの"attachment"はその名の通り添付を意味します。 その他には"inline"があります。 今回の場合はどちらでもなさそうなので省略して 絶対にダウンロードになってほしいなという私の願いがこめられています。 (ファイル名さえ認識してくれればよい) 美しいやり方ではないですね。

msystem
質問者

お礼

ご回答ありがとうございます。 確かに、ContentTypeは使い方が難しいですね。 特にIEは、ContentTypeにほとんど関係がないというところは、プラットフォームに依存しないシステムを作る際には、大きな障害になりますね。 大変参考になりました。ありがとうございました。

  • mann555
  • ベストアンサー率46% (29/62)
回答No.3

以下でいけます Response.ContentType = "text/plain" Response.AddHeader "Content-Disposition", "attachment;filename=xxxxxx.csv" sendtext = "'aaa','bbb'" Response.Write sendtext Response.End

msystem
質問者

お礼

ありがとうございます。 できました。 私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;) ところで、 Content-disposition; attachment;filename=xxxx.csv という書き方もあるようですが、「attachment」はどうゆう物なのでしょうか? あるのとないのと、何か違いがあるのでしょうか? それと、「ContentType」は、やはり「text/plain」が一番いいでしょうか? ContentType自身は、昔は自由に決めることができた(今も?)と聞いたことがあるので難しいですが、どこかに参考になるような資料はないでしょうか?

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

こんな感じのASP にするのではどうなのでしょう? <html> <head> <meta HTTP-EQUIV="Content-type" CONTENT="application/vnd.ms-excel"> </head> <body> <%  Response.Write "1,2" & vbNewLine  ... %> </body> </html> # 私は計算機屋ですが、ASP は触ったことが無いのではずしているかもしれません。

msystem
質問者

お礼

私もはじめそのような形でしてみました。 が、よく考えれば「<html></html>」の部分ですでにだめなのでは・・・ 実際、だめでした。 ですが、早速のお答えありがとうございます。 また、何か在ればよろしくお願いします。

関連するQ&A

  • CSVファイルのダウンロードができたりできなかったり・・

    ASPで、サーバー側で動的に作成したCSVファイルをクライアント側にダウンロードさせたいと思っていますが、 ダウンロードできるときとできないときがあり困っています。 「ファイルのダウンロード」ダイアログが表示され、うまくダウンロードできるときと、 「Internet Explorer では、[サイト名]-[aspファイル名]をダウンロードできません。このインターネットのサイトを開くことができませんでした。要求されたサイトがしようできないか、見つけることができません。後でやり直してください。」のメッセージが表示され、ダウンロードできない場合があります。 どちらもサーバー上にダウンロードすべきCSVファイルは作成されているので、ダウンロード部分に問題があると思うのですが、原因がわかりません。 ひとつ気づいたのが、csvファイルの容量が4.0MBを超えるとダウンロードできないような気がするのですが、関係ありますでしょうか? よろしくお願い致します。 --------出力のためのスクリプト----------------- Response.ContentType = "application/octet-stream" Response.AddHeader "Content-Disposition", "attachment; filename = " & CSVファイル名 Set fs = Server.CreateObject("Scripting.FileSystemObject") CSV_DATA = Server.MapPath(CSVファイル名) If fs.FileExists(CSV_DATA) Then Set ts = fs.OpenTextFile(CSV_DATA, 1) Do Until ts.AtEndOfStream Response.Write ts.ReadLine() & vbCrLf Loop ts.Close End If Response.End -----------------------------------------------

  • ASPでCSVファイルのダウンロード

    ASPでオラクル上のレコードを書き出したCSVファイルをダウンロードするページを作成しました。 あるフィールドに半角カンマが入ったレコードが存在したため、その行だけ列がずれてしまいました。 そのCSVファイルはAccessで作成したプログラムで取り込みます。インポート定義で、半角カンマをフィールドの区切りに設定してあります。 Accessでの読み込みエラーを回避するために、フィールド中の半角カンマを全角カンマに置換してCSVファイルを作成したいのです。 ASP上で、Replace関数を使用してみましたが、半角カンマが引数の区切りと認識されたり、シングルクオーテーションもコメントとして認識されたりしてうまくいきません。 Response.write Replace(rs("フィールド1"),",",",") & "," & rs("フィールド2") & vbNewLine ※rsはレコードセットです。 どなたか解決方法を知っていらっしゃる方、ご教授願います。

  • ASPでCSVを出力させたいです

    ASPでCSVを出力させたいのですが、うまくできません。 過去にも同じような質問があり、下記ソースで可能と書かれていました。 <% Response.AddHeader "Content-disposition", "filename=""motteke.csv""" Response.ContentType="text/csv" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> これを参考にしたのですが、どうしてもうまくいきません。 "1,2"が文字列として認識されてしまい、カンマ区切り("1","2"のような感じ)になりません。 どうか良い方法を教えてください。

  • ASPからファイルダウンロード

    Win2k+IISでASPプログラムを組んでいます。 A.aspのページでボタンを押すとA.aspないのDownLoad関数実行してファイルをダウンロードするプログラムです。 一回目はうまくダウンロードできますが,それが終わった後A.asp内のボタンを押してもダウンロードが出来ません。 これはなぜでしょうか。 (1)怪しいと思うところはA.aspページで全て処理しているからかな~と思います。 A.asp function download() Response.AddHeader "Content- Disposition","attachment;filename=aa.csv" Response.ContentType = "application/octet-stream" Response.Write( "AAAAaaa" & "," ) Response.Write( "BBBaaa" & "," ) Response.End() End function

  • ASPでCSV出力をするときにエラーが...

    ASPを使ってデーターベースにあるデーターをCSVファイルとして出力するスクリプトを組んでいます。 単純に Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","filename=" & "Data.csv" Response.Write "Date,Name,Code" & vbNewLine Do  Date=rsDataOutput("Date")  Name=rsDataOutput("Name")  Code=rsDataOutput("Code")  Response.Write Date & "," & Name & "," & Code & vbNewLine  rsDataOutput.MoveNext  If rsDataOutput.EOF Then   Exit Do  End If Loop といった形で出力しているのですが、出力されるファイルサイズが4Mを越えると、「HTTP500内部サーバーエラー」と表示されて出力できません。 ASPでCSVファイルを出力するのに、ファイルのサイズの上限があるのでしょうか?

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

    表記の件についてかなり困っています。 教えてください。 【環境】  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

  • ASPでCSVファイル作成

    ASP初心者です。 ASPでDBの検索結果をCSVファイルとしてダウンロードするプログラムを作成したいと考えております。 過去ログの検索で同じようなことを考えている方がいらっしゃったので、参考にさせていただいたのですが、どうもうまくいきません。 ちなみに「QNo.114813 ASPでCSVファイルを作成しダウンロードさせる」を参考にさせていただきました。 うまくいかない点は、ダウンロードすると全てのデータが1つのセル内に入ってしまいます。改行もされません。 解決策がわからないので助けて下さい。 よろしくお願いします。

  • CSVダウンロードができない

    ASPファイルで作成したページからMS-SQLのデータベースのデータをダウンロードするページを作成したのですが、 OSがWindows2000の環境だけが、インターネットから CSVダウンロードしようとするとファイルを任意のところに 保存することができず、ExcelのシートがIE上に開き表示されるだけなのですが、ダウンロードするためにはどのようにすれば解決しますか? サーバー上のIISの設定が悪いのか、PC側の設定が悪いのか情報があったら教えてください。

  • ASPでエクセルの印刷定義・・・

    ASPの初心者です。皆さんご教授願います。 上手くお伝えできるかどうかも不安ですが・・・  ASPでエクセルを起動しています。  そのエクセルをA4横とか、ページヘッダとかページを指定したい(ASP上で)のですが、どのような設定、スクリプトになるんでしょうか? ちなみに・・・ Response.Clear() Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift-jis") Response.ContentType = "application/vnd.ms-excel" Response.AppendHeader("Content-Disposition", "inline;filename=out_excel.xls;") Response.Write("<table>") Response.Write("<tr>") : : Response.Write("</tr>") Response.Write("</table>") Response.End() でエクセルを表示しています。 (Win2K,asp.net) 上手くお伝えできなかったら、すみません。 よろしくお願いします。

  • excelファイルをASPで作る方法

    ASPでホームページを作っています。 クライアントが、ある表を表示するホームページを見るとサーバー側に表示されている表と同じエクセルファイルを 作成させたいです。 そして、そのファイルにアンカー タグを張ったページから、エクセルファイルをダウンロードさせたいのです。 注意)エクセルファイルは、CSVではなく純粋なエクセルファイル(vbsでセル幅を変更できる)です。 どなたか、アドバイスをよろしくお願いします。