
お世話になっております。
【環境】
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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プリンターを指定して印刷するには
-
印刷要求順番と印刷出力順番が...
-
逆方向印刷をしたい。(VB6)
-
B4で手差しトレイから印刷(V...
-
出力するプリンタを指定したい。
-
Javaを使って、プログラムから...
-
C++Builder5で画像データを用紙...
-
DirectX利用プログラムにおける...
-
VB2008,DataGridViewの内容を印...
-
プリンタの印刷ジョブを削除し...
-
VBscriptでPDFファイルを直接印...
-
リンク先のページを印刷したい
-
VB2008で0ページの印刷ジョブを...
-
Accessフォームで全レコードを...
-
印刷ダイアログを表示させない方法
-
ACCESSで設定した帳票の用紙サ...
-
ファイルのパス指定での印刷方法
-
cプログラムを読んでいると put...
-
Eclipseを使ってソースを印刷し...
-
VBAにて指定したセルをプルダウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷ダイアログを表示させない方法
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
印刷要求順番と印刷出力順番が...
-
A4の2枚をA3の1枚にする編集方法?
-
オートメーションエラー(214741...
-
VBscriptでPDFファイルを直接印...
-
プリンターを指定して印刷するには
-
EXCELファイルの複数ダウンロー...
-
ACCESSで設定した帳票の用紙サ...
-
VB2005から複合機を使い自動FAX...
-
VBAで印刷スプール終了の判定を...
-
PHPでPDFファイルの直接印刷
-
2回以上PDFをコピーや印刷がで...
-
テキストファイル印刷 .net VB...
-
VBAで印刷の成功判定
-
VBでExcel印刷する時のプリンタ...
-
VB.NET+ActiveReports で印刷...
-
クリレポのプリンタ設定について
-
VB6上から印刷ダイアログを表示...
おすすめ情報