今なら家電が全品9%OFF!

VWD ASP.NET(VB) Excel2003

Webサーバー側に雛形Excelを配置し、ユーザーの指定により
DB情報をExcelに付加してダウンロードする方法を探しています。
以下のサイトに同じ発想の方がいましたが私はVBしかわかりません。
ユーザの利用は複数が同時に使用することも想定に考えると
以下のプログラムは安全なのかわかりません。
また、リンクが切れていて内容も理解できません。
何方かVBソースコードにて教えてください。
よろしくお願いいたします。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No.1氏の回答では、雛形Excelは考慮できていません。



それよりも、そもそもサーバサイドで Excel を操作する事は推奨されていないので、方式を改めることを検討するのが無難です。詳細は下記(技術的にだけでなくライセンス的にも)。
http://support.microsoft.com/kb/257757/ja

やるなら OLEDB プロバイダで Excel をデータベースと見立てて更新することです。
http://www.cocoaliz.com/asp.net/index/41/

複数利用については、雛形ファイルをコピーする際にファイル名にセッションIDなどを付与してユニークなワークファイルを作って操作する必要があるでしょう。

この回答への補足

早速、ご丁寧にありがとうございます。
ご相談ですが、以下のようなASP.Net(VB)でシステム構築
現在の申し込み書類(Excel)をWeb+DB対応。
・申し込み書をDBと連動してWebで自動作成し
 印刷プレビュー(Web印刷のようにヘッダーフッターのない形式)
 させたかったです。PDF自動生成でもよいのですが雛形を作成
 するのが大変でして、Excelを利用してできないものか。

現在使用している雛形Excelには承認印枠など多くの罫線枠があり
ASP.Netで作成するのには大変な作業で完成に至っていません。
何かよい方法はないでしょうか?
よろしくお願い致します。

補足日時:2012/06/05 14:46
    • good
    • 0

No.2 です。

こういうとき普通は 3rd Party 製品を利用します。

有名なのは Excel Creator です。
http://www.adv.co.jp/product/product_excelcreato …

Excel 雛形を元にファイル作成できます。
    • good
    • 0
この回答へのお礼

お礼をするのが大変遅くなりまして申し訳ありません。
製品を利用するのは予算がないので断念です。

先に回答いただいた内容で、あと少しのところまで辿り着きました。
>複数利用については、雛形ファイルをコピーする際にファイル名にセッションIDな>どを付与してユニークなワークファイルを作って操作する必要があるでしょう。

しかし、Excelのセル単位の更新ができないので
別でもう一度質問をさせていただきます。
ありがとうございました。

お礼日時:2012/06/14 17:58

簡単ですよ。


エクセルはHTMLパーサを持っているので、
HTMLのテーブル形式で表を作成してレスポンスに書き出せばOKですよ。

残念ながらASP.NETは知らないので、昔のレガシーASPのソースを!

Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition","Content-Disposition: inline; filename=SAMPLE.xls"
Response.Write("<html xmlns:x='urn:schemas-microsoft-com:office:excel'> ")
Response.Write("<html>")
Response.Write("<body>")
Response.Write("<table border='1' cellspacing='1' cellpadding='2'>")
Response.Write("<tr bgcolor='#0066FF'>")
Response.Write("<td align='center' nowrap><font color='#FFFFFF'>SEQ</font></td>")
Response.Write("<td align='center' nowrap><font color='#FFFFFF'>ITEM</font></td>")
Response.Write("</tr>")
linecount = 0
Do While Not RS_TABLE.EOF '// RS_TABLEは事前にOPEN
linecount = linecount + 1
Response.Write("<tr bgcolor='#FFFFFF'>")
Response.Write("<td align='center' nowrap rowspan >" & linecount & "</td>")
Response.Write("<td align='center' nowrap rowspan x:str>" & RS_TABLE("ItemCd") & "</td>")
Response.Write("</tr>")
RS_TABLE.MoveNext
Loop
Response.Write("</body>")
Response.Write("</table>")
Response.Write("</html>")

この回答への補足

早速、ありがとうございます。
私には少し難しいので教えてください。
雛形のExcelの読込は何処で行っているのでしょうか?
雛形Excelの保存先を記述するばしょがわかりません。
申し訳ありませんがよろしくお願い致します。

補足日時:2012/06/05 10:57
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【緊急】ASPでのExcel出力方法について

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力されたExcelを開くたびにバージョン不一致の警告(ファイル形式と拡張子が一致しません)が表示されて不便です。

よって、Excel出力をExcelオブジェクトを用いた方法に変更しようと考えております。
====================================
'ファイルシステムオブジェクト生成
Set oFs = Server.CreateObject("Scripting.FileSystemObject")

'テンポラリファイル名取得
sFileName = Split(oFs.GetTempName, ".")

'エクセルファイル名にする
sXlsName = sFileName(0) & ".xls"

'テンプレートが保存されているフォルダの物理パスを取得
sPath = oFs.GetFolder(Server.MapPath("/hogehoge/")).ParentFolder

'エクセルのオブジェクトを生成
Set oXls = Server.CreateObject("Excel.Application")

'エクセルのテンプレートファイルを開く
Set oTmp = oXls.Workbooks.Open(sPath & "\temlate\template.xls")
 ~
====================================



ここからが質問です。

Excelオブジェクト作成時、エラーになってオブジェクトの作成が失敗します。
====================================
【オブジェクト作成を「Server.CreateObject」で行った場合】
Set oXls = Server.CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Server オブジェクト エラー 'ASP 0177 : 80080005'
  Server.CreateObject に失敗しました

【オブジェクト作成を「CreateObject」で行った場合】
Set oXls = CreateObject("Excel.Application")
⇒ 以下のエラーが表示されます。
  Microsoft VBScript 実行時エラー エラー '800a01ad'
  ActiveX コンポーネントはオブジェクトを作成できません。: 'Excel.Application'
====================================

いろいろなサイトを情報をもとに対応しましたが、解決の糸口が見えない状況です。
====================================
【今まで試みた対応】
(1)コンポーネントサービスの「DCOMの構成」にて、「Microsoft Excel Application」の「起動とアクティブ化のアクセス許可」に「EveryOne」を追加。
(2)以下のフォルダを用意してフォルダのアクセス許可に「EveryOne」を追加。
 C:\Windows\System32\config\systemprofile\Desktop
 C:\Windows\SysWOW64\config\systemprofile\Desktop
(3)オブジェクト作成時、「Excel.Application」を「Excel.Application.15」に変更。
====================================

なお、開発環境は以下となります。
====================================
【開発環境】
OS:windows 8.1 64bit
IIS:8.5
Excel:2013
その他:(1)aspを使用(.netではありません)
    (2)「windows 8.1」はあくまでテスト環境です。
     正常に動作することを確認後、本番環境「Win2008Server R2」に組み込む予定です。
====================================

私事ではありますが、スケジュール的に押し迫っております。

お忙しいところ申し訳ありませんが、解決方法のご教授をお願いいたします。

以上です。

いつも参考にさせていただいております。

現在、aspで作成したweb環境を運用しております。

その中で抽出したデータをExcelに出力する処理がありますが、これを以下の方法で行っております。
====================================
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
 ~
response.flush
response.end
====================================

ただ、「Excel2013」であることから、出力され...続きを読む

Aベストアンサー

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーASPが正常に動作する保証はありません。そもそも、32bitの2003サーバでさえ、ASPを動作させるためには多数の依存ライブラリをインストールする必要がありました。
FileSystemObjectやDictionaruObjectは間違いなく落ちます。
・Windows8.1/64bitと、Windows 2008R2サーバでは、IISのバージョンや動作スキームが完全に異なっており、32ビット依存コンポーネントのインストール状況が違います。
また、上記のセキュリティ設定も、サーバOSは根本的に異なります。

自分ならさっさと諦めて、その部分だけASPX仕様に変更し、Excel生成用のWebライセンスつき市販ライブラリを購入してカタをつけます。

Excel Creator
http://www.adv.co.jp/product/product_excelcreator2012.htm

Webサーバ上で正しいExcelデータを生成するということは、非常にコストのかかるタスクなのですよ。

それが予算の関係で不可能なら、CSVで我慢してもらうか、Office XLSXを解読して生成するか、HTMLかWell FormedなXMLを生成し、レスポンスヘッダを詐称して強引にエクセルに認識させる(要するに現在ご提示のNGな方法)かすることです。

回答になってなくて申し訳ありませんが、「やっても無駄」というお答えしかできません。
あしからず。

残念ながら、何重もの理由で、そのソリューションは成立しません。

・Excelのようなマルチスレッド未対応のオブジェクトをWebサーバで走らせると、確実に暴走するか、エラーで停止します。ExcelやAcrobatなど、何でも同じです。
・エラーが起きた後、メモリからオブジェクトが抹消されないため、あっという間にメモリリークを起こし、サーバがハングします。
・そもそも、ソフトウェアベンダは、Excelなどのアプリケーションをサーバ上で稼働させるライセンシーを認めていません。
・64biot OSのうえでレガシーAS...続きを読む

QASPによるEXCELファイルの操作

宜しくお願いします。
サーバーに保管してあるEXCELテンプレートが保管してあります。
ASPを用いて、テンプレートの特定セルにデータを入力したのち
そのテンプレートをクライアント側のPCに保存したいのですが可能でしょうか。

ちなみに、自分のPC内(Localhost)では、下記のプログラムでうまく動いたのですが
サーバーに移すと、このプログラムのところでエラーが出ます。

初心者で見よう見まねでプログラムしているので、理屈等が理解できていないのですが
どなたかアドバイスいただけると幸いです。
宜しくお願いします。

'=================================================
'----- EXCEL作成
'=================================================
Sub excel_save()

Dim strFileName
Dim ex, wb, sh, objExcelBook

strFileName = "C:\Temp\報告書.xls"
Set ex = Server.CreateObject("Excel.Application")
ex.visible=false
ex.displayalerts=false
Set objExcelBook = ex.Workbooks.Open(strFileName)

Set wb = ex.activeworkbook
Set sh = wb.Sheets("報告書")
sh.Range("I3").Value = KanriNo

objExcelBook.SaveAs ("【" & KanriNo & "】報告書.xls")
objExcelBook.Close False
ex.Application.Quit
set sh = Nothing
Set wb = Nothing
Set objExcelBook = Nothing
Set ex = Nothing

End Sub

宜しくお願いします。
サーバーに保管してあるEXCELテンプレートが保管してあります。
ASPを用いて、テンプレートの特定セルにデータを入力したのち
そのテンプレートをクライアント側のPCに保存したいのですが可能でしょうか。

ちなみに、自分のPC内(Localhost)では、下記のプログラムでうまく動いたのですが
サーバーに移すと、このプログラムのところでエラーが出ます。

初心者で見よう見まねでプログラムしているので、理屈等が理解できていないのですが
どなたかアドバイスいただけると幸いです。
宜しく...続きを読む

Aベストアンサー

SaveAsは通常、絶対パス(ドライブ名からファイル名まで)で入力します。

QIIS7.5 Excel ファイルオープンエラー

■現状
現在、WindowsServer2003、IIS6.0、Excel2003でaspのプログラムを、WindowsServer2008 R2、IIS7.5に移行しているのですが、
登録等の動作は問題なく稼動しているのですが、Excelファイルの出力で
『Workbooks クラスの Open プロパティを取得できません。』
とエラーが出力され、Exelファイルへの出力ができません。Excel2003/2010ともに同じです。

insXlsApp = Server.CreateObject("Excel.Application")
insXlsBooks = insXlsApp.Workbooks
insXlsBook = insXlsBooks.Open(strPAth & "blank.xls")

Openのところでエラーになります。

■環境
WindowsServer2008 R2
IIS7.5
ASP.NET2.0
Excel2003/2010

■設定
web.config
・<identity impersonate="true"/>

IISのアプリケーションループの設定では、
・32bit → 有効
・マネージパイプラインモード →クラシック
・プロセスID → ApplicationPoolIdentity

DCOM設定
・Microsoft Excel Applicationのプロパティで「セキュリティ」→「起動とアクティブ化のアクセス許可」→「カスタマイズ」で
 IUSERに権限を付与。
 ※「ID」タブを選択し、ユーザーから「このユーザー」を選択、実行したときに与える権限を持つユーザーとパスワードを入力してもダメでした。

フォルダ
・エクセルが保存されているフォルダに、IUSER,administrator,EvereOneにフル権限を与えてみてもダメでした。

このやり方は非推奨なのは知っていますが、サーバー、クライアント全てにエクセルは入っています。
サードパーティ等他のやり方が良いのは重々承知の上で質問しています。
色々調べ試してみましたが上手くいきません。
どなたかお知恵を貸してください。よろしくお願いいたします。

■現状
現在、WindowsServer2003、IIS6.0、Excel2003でaspのプログラムを、WindowsServer2008 R2、IIS7.5に移行しているのですが、
登録等の動作は問題なく稼動しているのですが、Excelファイルの出力で
『Workbooks クラスの Open プロパティを取得できません。』
とエラーが出力され、Exelファイルへの出力ができません。Excel2003/2010ともに同じです。

insXlsApp = Server.CreateObject("Excel.Application")
insXlsBooks = insXlsApp.Workbooks
insXlsBook = insXlsBooks.Open(strPAth & "blank....続きを読む

Aベストアンサー

Openでエラーということで気になるのは実行しているアカウントに対話型のユーザーインタフェースの利用が許可されていない、あたりかと思います。

#確かそんなような名前の許可だったかと。

IIS 7.5の実行時のユーザーはデフォルトだと様々な制限を受けているアカウントなので、そのあたりの制限がひっかかっているかと思います。
デフォルトの制限項目を変更するのは確か難しかったと思うので、アカウントの偽装で回避するのがいいのかなぁ。。。

QASPで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」でもだめでした。
何かよい知恵をお貸しください。

ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか?

手順
クライアント        サーバー
あるURL(A.ASP)にアクセス
             A.ASPのスクリプトでCSVフォーマットを作成
             クライアントに送信(多分、Response.Writeで)
ダウンロードダイアログが開く
「A.CSVをダ...続きを読む

Aベストアンサー

これでOK!です。

<%
Response.AddHeader "Content-disposition", "filename=""motteke.csv"""
Response.ContentType="text/csv"
Response.Write "1,2" & vbNewLine
Response.Write "3,4" & vbNewLine
%>

"text/csv"は適当です(笑)

QASPからEXCELに出力する

ASP(VBS、JS、XML)等を使用してWEBページからボタンを
押した時に画面に表示されている表をEXCEL形式に
出力する方法を教えて下さい。
やっぱり複雑な表は難しいですかね?
またCSV形式でも構わないので、よろしくお願いします。

Aベストアンサー

ANo1.の回答のとおりです。
このやり方は、私の社内LANのHPでWebアプリケーションとして
数年前から使用しています。
出力は、Web形式(HTML形式)になりますので、適宜BOOK形式に変換(名を付けて保存)が必要です。
(留意点)
サンプルは、英語のサンプルなので日本語を含む場合は、以下のようにMETAタグを書き出します。 METAタグを書かないと文字化けが起きる可能性があります。
(1)response.write "<table width=200>"の前に次を挿入します。

 response.write "<html>"
response.write "<meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS"">"

(2)response.write "</table>"の後に、次を挿入します。

  response.write "</html>"





 

QASPから既存のexcelブックを開きたいです

件名どおり、ASPから既存のexcelブックを開きたいです。
サーバ上にあるexcelブックをただ開く(表示)させるだけでいいんですが。
できないものなのでしょうか。
エラー的には「オブジェクトがありません」がでてしまいます。

Aベストアンサー

Set objExcel = Server.CreateObject("Excel.Application")
これはサーバーの内部で Excel を起動するためのコード。
恐らくはこの後にサーバー内にある Excel のデーターファイルを開く処理を記述したいんだと思うが、サーバーが Excel ファイルを開いてみ意味がないし、サーバーに Excel をインストールしてるはずもないだろうし、一度に複数人がそのページを開こうとすると、同時閲覧者の数だけ Excel が起動するし、サーバーの内部で ASP の処理をしているアカウントはサーバーにログオンしたことがないアカウントだろうから Excel を起動させることもできないだろうし、、、
やっぱり意味がない。

ASP 云々の話ではなく、根本的な勘違いをしている。
今回の要望は、クライアント側のブラウザ上で、サーバーにある Excel ファイルを開きたいわけなので、ASP は特に関係ない。
Excel のデーターファイルにハイパー リンクを張る、通常の HTML の書き方だけで良い。

もし仮に
Set objExcel = Server.CreateObject("Excel.Application")
とかやるんだったら、サーバー側で Excel のデーターファイルを開き、シート上のセル値を読み取って、HTML のテーブルで表を作成して、読み取ったセル値を表示させる方法になってくる。
この場合、ブラウザ上に表示されるのは単なる HTML のテーブルであるので、ユーザーは Excel を起動するわけでなない。

Set objExcel = Server.CreateObject("Excel.Application")
これはサーバーの内部で Excel を起動するためのコード。
恐らくはこの後にサーバー内にある Excel のデーターファイルを開く処理を記述したいんだと思うが、サーバーが Excel ファイルを開いてみ意味がないし、サーバーに Excel をインストールしてるはずもないだろうし、一度に複数人がそのページを開こうとすると、同時閲覧者の数だけ Excel が起動するし、サーバーの内部で ASP の処理をしているアカウントはサーバーにログオンしたことがないア...続きを読む

QASPで画面間のパラメタ受け渡し

こんばんは。ASP初心者です。
ASPでWEBページの作成を行っています。画面遷移をResponse.Redirect()で行っているのですが、遷移前のページと遷移後のページでパラメタを受け渡したい場合はSession("hoge") = "hogehoge"のようにセッションに入れる以外、何か方法はないでしょうか。リクエスト間でパラメタ渡せればがいいので、セッションを通じて保持しておく必要がないのです。クエリを使用するとアドレス欄に変数の値が見えてしまうのでできれば使いたくありません。

Aベストアンサー

1. Cookieを使う
2. 画面遷移を postで行い、hidden項目に値をセットする (要JavaScript)

私は面倒なのでセッション変数使ってますが、必要なくなればセッションをクリアすれば良いだけだと思います。

Session.Contents("hoge") = Empty

QASP.Net ラベルの内容をすぐに更新したい

大変お世話になっております。
昨年は大変お世話になり、多大なご教授をいただきました。
本年も何卒よろしくお願いいたします。

前々からお聞きしようと思っていたのですが、
処理によってラベルの内容がすぐに反映しないのですが
どのようにすればすぐに反映するのでしょうか?

例えば下記のような場合は、ラベルの内容を初期化したいのですが、
それがされるのは、ボタンの処理後になります。
ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?

もしかしたら 大変初歩的な質問かもしれませんが、
何卒よろしくお願いいたします。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click

  Me.Label1.Text = ""

  ここからボタンの処理が開始します

End Sub

Aベストアンサー

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "document.getElementById('" + Label1.ClientID + "').innerText = ''";
}

サーバー側イベントとクライアント側イベントは別物だといことを理解するべし。

ユーザーがボタンをクリック
→ボタンのクライアントイベント(onclick)
→formのsubmit
→ブラウザがPOST
→ASP.NETがポストバックを受け取る
→Page_Loadやらいろいろ
→ボタンのサーバーイベント(Click)
→Renderやらいろいろ
→ブラウザにHTMLを返す
→ブラウザ側の表示

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "docu...続きを読む

QASP.NETでのメッセージ画面を出すには

はじめまして。
ASP.NET(C#)で、開発をしています。
例えば、内部である処理が終わった後に「完了!」みたいなメッセージ画面をポップアップさせたいと思っております。いろいろ調べてはいるんですが、方法がわかりません。JSを使わなければならないのかなとは思いますが、具体的な方法がわかりません。
よい方法がありましたら、教えていただけないでしょうか。よろしくお願いいたします。

Aベストアンサー

確認は取れていませんが、多分以下のHPの内容でいけると思いますが…。
参考に如何でしょうか。

・ASP.NETでメッセージボックス(OK・NO)の処理について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5952&forum=7&6

・Webアプリでメッセージボックスを使いたい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1644&forum=7&7

QEXCELファイルの複数ダウンロードについて

お世話になっております。

【環境】
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")

どなたかご存知の方がいらっしゃれば、ご教授ください。
よろしくお願いいたします。

お世話になっております。

【環境】
ASP.NET(VB)
IIS

【質問】
ボタン押下時に2つの異なる帳票(A帳票.xls、B帳票.xls)を作成し、別々にダウンロード処理をさせたいのですが、上記2帳票を別々にダウンロードさせるための実装方法がわかりません。
1つの帳票でしたら、下記の実装方法でダウンロードをすることが確認できました。

Response.Clear()
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Response.AddHead...続きを読む

Aベストアンサー

>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

>Response.ClearContent()なのですが、A/B各帳票出力前に行っています。参考URLでは、ClearContentからCloseまでを1セットとしてまわしているようでしたので、以下のような実装としました。

私もできるんじゃないかと思って最初アドバイスしてましたが、よくよく考えると、一度、HTTPヘッダを設定した場合、その後のヘッダは無視されますね。

そうなると、ContentTypeには、multipart/mixed をセットした処理を実装する他ありません。

ただし、multipart/mixedは、ブラウザに依存する上に、IEやFireFox...続きを読む


人気Q&Aランキング