
お世話になっております。
【環境】
ASP.NET(VB)
IIS
【質問】
ボタン押下時に2つの異なる帳票(A帳票.xls、B帳票.xls)を作成し、別々にダウンロード処理をさせたいのですが、上記2帳票を別々にダウンロードさせるための実装方法がわかりません。
1つの帳票でしたら、下記の実装方法でダウンロードをすることが確認できました。
Response.Clear()
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls")
Response.WriteFile("D:\temp/A帳票.xls")
どなたかご存知の方がいらっしゃれば、ご教授ください。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
>Response.ClearContent()なのですが、A/B各帳票出力前に行っています。
参考URLでは、ClearContentからCloseまでを1セットとしてまわしているようでしたので、以下のような実装としました。私もできるんじゃないかと思って最初アドバイスしてましたが、よくよく考えると、一度、HTTPヘッダを設定した場合、その後のヘッダは無視されますね。
そうなると、ContentTypeには、multipart/mixed をセットした処理を実装する他ありません。
ただし、multipart/mixedは、ブラウザに依存する上に、IEやFireFoxで動く保障がありませんし、また、"application/vnd.ms-excel"のContextTypeを使っている以上、複数ファイルの同時ダウンロードは、HTTPの要件とブラウザの仕様でできないというのが回答になります。
そこは、HTTPの要件がもうそうなってしまっているので私たちの力ではどうにもできないということですね。
http://sonic64.com/2003-11-11.html
ということで、当初お話した、
「ダウンロードする際、JavaScriptなどを使って、2種類のWindowを開き(window.open)、1つはA帳票.xls、もう1つはB帳票用にaspxを分けてダウンロード処理を実装する」
これしか方法論はありません。
また、もっと携わられているWebサイトやWebシステムの機能仕様面をご自身や担当SEなどに相談し見直されることをお勧めします。
宜しくお願いします。
参考URL:http://sonic64.com/2003-11-11.html
kero-mio様
やはり、window.openを使うより他なさそうですね。
貴重なお時間を割いていただきありがとうございました。
No.2
- 回答日時:
私がアドバイスしたResponse.ClearContent() をいれてないみたいですが、なぜでしょうか?
私も現在ASP.NETを動かせる動作環境を持っていないため、感覚で申し上げていて大変恐縮なのですが、Response.ClearContent()を使わずに
ヘッダをセットを2回書いた理由をお聞かせ下さい。
この回答への補足
ご回答ありがとうございます。kero-mio様のおっしゃっていたResponse.ClearContent()なのですが、A/B各帳票出力前に行っています。参考URLでは、ClearContentからCloseまでを1セットとしてまわしているようでしたので、以下のような実装としました。
' A帳票
Response.ClearContent() '←ここで初期クリア
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls")
Response.WriteFile("D:\temp/A帳票.xls")
' クライアントへすべて書き出し
Response.Flush()
Response.Close()
' B帳票
Response.ClearContent() '←ここで2回目クリア
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=B帳票.xls")
Response.WriteFile("D:\temp/B帳票.xls")
' クライアントへすべて書き出し
Response.Flush()
Response.Close()
No.1
- 回答日時:
ブラウザによっては、multipart/x-mixed-replace を
ContextTypeに指定し、Response.AddHeaderをそれぞれのファイル名で
1回ずつ呼んであれば、複数ファイルの同時ダウンロードができる
ブラウザもあります。
なので、結論としては、ダウンロードする際、JavaScriptなどを使って、2種類のWindowを開き(window.open)、1つはA帳票.xls、もう1つはB帳票用にaspxを分けてダウンロード処理を実装するしかないように思います。
後はどうしても、JavaScriptなどクライアント側の制御をしたくないという場合は、上記の処理をA帳票、B帳票と2回実行してもいいと思います。
' A帳票
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls")
Response.WriteFile("D:\temp/A帳票.xls")
' A帳票を指示したら、今度はB帳票を出す準備のため、いったんクリア
Response.ClearContent()
' B帳票
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls")
Response.WriteFile("D:\temp/B帳票.xls")
' クライアントへすべて書き出し
Response.Flush()
Response.Close()
これしか方法がないように思います。
(ただ、上記コードはまったく動作確認をしてないので動かないかもしれませんが、感覚だけでもつかんで頂ければ・・・)
宜しくお願いします。
参考URL:http://www.eggheadcafe.com/community/aspnet/2/10 …
この回答への補足
kero-mio様、早速の回答ありがとうございます。
現状、ご教授いただいた下記の方法では実装ができているのですが、ダウンロードの際に小窓が出てしまって余り見栄えがよくありません。
>結論としては、ダウンロードする際、JavaScriptなどを使って、2種類のWindowを開き(window.open)、1つはA帳票.xls、もう1つはB帳票用にaspxを分けてダウンロード処理を実装するしかないように思います。
A帳票、B帳票と2回実行する方法について実装してみました。
kero-mio様の回答と、参考URLをもとに、下記のようにコーディングをしてみたのですが複数でダウンロードダイアログが出ませんでした。
ひとつのブラウザに複数のヘッダをセットするあたりがいまいち、ピンとこない感じです。
' A帳票
Response.ClearContent()
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls")
Response.WriteFile("D:\temp/A帳票.xls")
' クライアントへすべて書き出し
Response.Flush()
Response.Close()
' B帳票
Response.ClearContent()
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHeader("content-disposition", "attachment; filename=B帳票.xls")
Response.WriteFile("D:\temp/B帳票.xls")
' クライアントへすべて書き出し
Response.Flush()
Response.Close()
引き続き調査・実装中ですが、取り急ぎ経過報告まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaから直接プリンターへ印刷...
-
印刷ダイアログを表示させたくない
-
オートメーションエラー(214741...
-
プリンターを指定して印刷するには
-
クリレポのプリンタ設定について
-
プリンタドライバの用紙サイズ...
-
PHPからVBで作った文書印刷処理...
-
VBAで印刷の成功判定
-
CrystalReportでの連続紙印刷(...
-
EXCELファイルの複数ダウンロー...
-
A4の2枚をA3の1枚にする編集方法?
-
VBAで印刷スプール終了の判定を...
-
2回以上PDFをコピーや印刷がで...
-
VB6でのネットワークプリン...
-
ActiveReportsの帳票印刷について
-
出力するプリンタを指定したい。
-
VBScriptでエクセル印刷モード起動
-
vba 時間の引き算 例えば 15:00...
-
Process.Startで起動したアプリ...
-
Windows PowerShellでC言語を実...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷要求順番と印刷出力順番が...
-
印刷ダイアログを表示させない方法
-
印刷ダイアログを表示させたくない
-
vbaでPDFファイルが印刷されない
-
2回以上PDFをコピーや印刷がで...
-
プリンターを指定して印刷するには
-
PHPでPDFファイルの直接印刷
-
クリレポのプリンタ設定について
-
VBscriptでPDFファイルを直接印...
-
ACCESSで設定した帳票の用紙サ...
-
VBAで印刷スプール終了の判定を...
-
Eclipseを使ってソースを印刷し...
-
VB2005から複合機を使い自動FAX...
-
Javaから直接プリンターへ印刷...
-
C++Builder5で画像データを用紙...
-
VBAで印刷の成功判定
-
オートメーションエラー(214741...
-
F-BASICで印刷データをスプール...
-
VBAで不特定枚数印刷をしたいで...
-
EXCELファイルの複数ダウンロー...
おすすめ情報