[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.059 結果をExcelで返すならresponse.ContentType=application/vnd.ms-excel

結果をExcelで返すならresponse.ContentType=application/vnd.ms-excel


本文(発行内容)


<結果をExcelで返すならresponse.ContentType=application/vnd.ms-excel>

こんにちは、三流プログラマーのKen3です。 今回は、 ASP Excel 系を探っていたら、 また新たに、 response.ContentType response.buffer = true response.flush response.end なんてサンプル拾ってきたので、 ネタにしてみたいと思います。 拾い読みして、何かの参考となれば幸いです。

/* * 1.今回のキッカケ */

なかなか、ASPでExcelの処理、ADO使ってごまかしたけど、 他に方法無いか?模索中です。 そしたら、マイクロソフトのHPから、おっ?と思うサンプルを拾う。

/* * 2.拾ったサンプル */

http://msdn.microsoft.com/library/en-us/dnwebteam/html/webteam07032000.asp ちっ、ここも英語かよ、日本語のサンプルは無いの? それとも日本語化される前に、ASP.NETになっちゃったの? なんて前置きは置いといて、 いつもの台詞で、英語読めないけどプログラムソースはなぜか読める そんな三流プログラマーが下記のソースを拾ってきた。 ※ページの下のほうに転がってました <%@ language=vbscript %> <% response.buffer = true response.ContentType = "application/vnd.ms-excel" response.AddHeader "content-disposition", "inline; filename=dynamic.xls" response.write "<table width=200>" response.write "<tr>" for i = 1 to 4 response.write "<td width=40>" response.write i + i response.write "</td>" next response.write "<td width=40><b>=sum(A1:D1)</b></td>" response.write "</tr>" response.write "</table>" response.flush response.end %> なにやら、 response.ContentType = "application/vnd.ms-excel" response.AddHeader "content-disposition", "inline; filename=dynamic.xls" とExcel処理の匂いがプンプン。 夏の女性の匂いに引き付けられないで、サンプルの匂いに魅かれてちゃダメだよ。 ここで、私がもしかしたら使えるのかも?と思ったのが、 response.write "<td width=40><b>=sum(A1:D1)</b></td>" と、セルの集計関数の=Sumを使っている場所。 データだけならCSV経由でサーバーから落として、 あと好きなように加工してね、、とやるんだけど、 もし=Sumなどワークシート関数使えるなら、 結果をASPからExcelで返す時、いろいろと使えるのでは? で、上記ソースをまるごとコピーして、実行してみました。 http://www.ken3.org/cgi-bin/test/test059-1.asp で実行できます。 すると、いつものxlsファイルを開く、保存の警告メッセージ。 ってことは、Excelのファイルとして認識? ※↑メッセージ画面 開くを選択して、開いてみると、=SUMの計算式が埋まっていた。 ※↑開いたイメージ。

/* * 3.拾ったサンプルを解析して自分のものにする */

さてと、そんな方法でExcelファイルを返すことが出来たので、 拾ったサンプルを自分のものにするために、 わからないことを探りますか。 response.buffer = true を調べると、 response.buffer = true の時は、出力をバッファして、 response.flush 途中でバッファを出力 response.end  ASPの処理を中止し、現在までの結果を返すのかぁ。 なるほどね。 関連項目として、今回出てこなかったけど、 response.clear ってのがあって、バッファに格納された出力をクリアすることが出来ます。 このクリアを使って、エラーが発生したら、途中までの出力を消して、 エラーのメッセージ画面を表示することも出来そうです。 ※また注意事項として、  response.buffer = trueは、<Html>などの出力の前に行うことです。  まぁ、出力のバッファだから、一番最初にやれってことね。 次は、 response.ContentType = "application/vnd.ms-excel" これは、今から送るデータのタイプは、 "application/vnd.ms-excel" ですよ、とブラウザに教えるために書きます。 response.ContentType = "imge/gif" など、指定します。 文字データだけじゃなくて、ASPでいろいろと出来るんだね、、と感じた。 response.AddHeader "content-disposition", "inline; filename=dynamic.xls" これは、詳しく載っていなかったけど、 動作や.AddHeaderから判断すると、ヘッダ情報にファイル名を載せている感じです。 response.write "<table width=200>" response.write "<tr>" ↑この、Excelファイルなのに、普通のテーブルってのが不思議だけど、 for i = 1 to 4 response.write "<td width=40>" response.write i + i response.write "</td>" next TDだから、横に数値を書き込んで、 response.write "<td width=40><b>=sum(A1:D1)</b></td>" ここが一番感動した、 =Sum とワークシート関数を入れている部分です。 普通にテーブルイメージなんですね。 response.write "</tr>" 行の終了、 response.write "</table>" テーブルの終了 response.flush バッファを出力 response.end ASP終了 って流れでした。

/* * 4.終わりの挨拶 </HTML> */

今回は、 あまり自分のものに出来てないけど、 ・出力バッファの制御 ・response.ContentType = "application/vnd.ms-excel"でExcelファイルを返す ・普通にテーブルのタグでOK ・response.write "<td width=40><b>=sum(A1:D1)</b></td>"と関数も使用可能 って話でした 何かの参考となれば幸いです。 ※ASPでWebのシステムって奥が深そう、、なんて言ってて、  もう時代はASP.NETになってくるのかぁ・・・ 素朴な疑問やリクエスト、クレームなどがあったら、 掲示板 : http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi に気軽に書き込んでください。 ASP、VBScript勉強中の三流プログラマーのKen3でした。

フィードバック

ASP系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.059を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告