[三流君] −−>
[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系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告