[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.060 しつこい加筆解説、学習方法、拾ったサンプルソースをものにする方法
しつこい加筆解説、学習方法、拾ったサンプルソースをものにする方法
本文(発行内容)
<しつこい加筆解説、学習方法、拾ったサンプルソースをものにする方法>
こんにちは、三流プログラマーのKen3です。
前回のNo.59に文章を付け足しただけですが
学習方法、拾ったサンプルソースをものにする方法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
として、再度追加発行します。
発行前にもっと内容、見たほうがよかったですね。
くだらない解説付のほうがいいのか?
それとも
マジメな解説がいいのか?
迷うところだけど。
基準として、
同じネタでも毒吐いてるのは、
http://www.ken3.org/guchi/
のプログラマー愚痴系で、
http://www.ken3.org/asp/
のASP系は、マジメに解説しようと思っているのですが、
同じ作者なので、時々、まざってしまうけど、ご勘弁を。
拾い読みして、何かの参考となれば幸いです。
/*
* 1.今回のキッカケ
*/
ASPでExcelの処理、ADO使ってごまかしたけど、
他に方法無いか?模索中・・・・
そしたら、マイクロソフトのHPから、おっ?と思うサンプルを拾う。
拾ったサンプルを自分のものにした、そんなストーリーを書きます。
元ネタは、ASPですが、他の言語でもやりかたは一緒だと思うので、
何かのきっかけとなれば、、、、
いつもの三流プログラマーの語りから、何かをつかんでくれれば幸いです。
/*
* 2.拾ったサンプル
*/
ASP Excel でいろいろと検索、巡回してました。
いろいろと出てきますねぇ、要望が多いのかなぁ。
私のつぶされそうなカスページにもポツポツ検索で来るし、
おっ、マイクロソフトのサンプルページかぁ、
よし、見てみるか。
※てな感じで、みなさんも必要なサンプルを探していると思います。
http://msdn.microsoft.com/library/en-us/dnwebteam/html/webteam07032000.asp
ちっ、ここも英語かよ、日本語のサンプルは無いの?
それとも日本語化される前に、ASP.NETになっちゃったの?
サンプル、見つかっても英語の時、ガックリ来ますよね。
なんて前置きは置いといて、
いつもの台詞で、英語読めないけどプログラムソースはなぜか読める
そんな三流プログラマーが下記のソースを拾ってきた。
※ページの下のほうに転がってました
あきらめないで、読めないのに軽く流し読みすると、
たまに自分の目にソースファイルが飛び込んでくる。
英語読めないけど(コメントやメッセージの意味は不明)
でも、VBAやASPの言語仕様は万国共通なので、
ソースファイルはなぜか不思議とある程度は読むことが出来ると思う。
<%@ 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.writeで出力しているみたいだなぁ、
で、中身をざっと見てみると、
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>などの出力の前に行うことです。
まぁ、出力のバッファだから、一番最初にやれってことね。
こんな、流れで、自分の知らない命令をヘルプで調べたり、
初めの調査はASP Excelだったのに、
芋ずる式にresponse.bufferを調べるようになり、自分のものになっていく。
また、自分で調べると関連項目、ここではサンプルに載っていなかった
response.clear
って出力をクリアする処理をついでに覚えて、
途中までの出力をクリア(キャンセル)して、新たなエラーなどを出力できる。
そんな処理方法まで、学習してしまった。
次は、
response.ContentType = "application/vnd.ms-excel"
これは、今から送るデータのタイプは、
"application/vnd.ms-excel"
ですよ、とブラウザに教えるために書きます。
response.ContentType = "imge/gif"
など、指定します。
文字データだけじゃなくて、ASPでいろいろと出来るんだね、、と感じた。
ここは、これで止めてしまったが、
自分の学習リストをメモ帳などのテキストで残しておき、
ヒマなとき、response.ContentType = "imge/gif"を調べる、、、
なんてやっておくと、幅広く知識を吸収できます。
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だから、横に数値を書き込んで、
※自分で知識があるから、さらっと読めるけど(読めたけど)
ASPやHTMLやったこと無い人は、<TD>って何?
から解析に入らないといけないので、
ソースを拾って読むには、ある程度の知識が必要とフト思いました。
response.write "<td width=40><b>=sum(A1:D1)</b></td>"
ここが一番感動した、
=Sum
とワークシート関数を入れている部分です。
普通にテーブルイメージなんですね。
※解析してて嬉しくなる、、そんな感覚があると思います。
下ばかり見て歩いてないで、周りをよく見て歩いていたら、
風がふいて・・・いいもの目撃・発見、、なんてことは無いかな(謎)
変な想像したアナタ、あたりだよたぶんその想像が(笑)
response.write "</tr>"
行の終了、
response.write "</table>"
テーブルの終了
response.flush
バッファを出力
response.end
ASP終了
って流れでした。
こんな感じで、拾ってきたソースサンプルを
自分の知識にすることができました。
なんて流れるように書いてるけど、
これは私の数少ない成功例
^^^^^^^^^^^^^^^^^^^^^^^^
実際は、解析途中で断念したり、
棚上げ後回しの拾ってきたソース君達も多いです。
全て、こんな方法で知識を吸収はできないのですが、
方法の1つとして、感覚だけでもつかんでもらえて、
成長のキッカケとなればうれしいです。
/*
* 4.終わりの挨拶(次回はアルのか?(爆))
*/
内容は同じだったのですが、
学習をテーマに加筆してみました。
たまにこんな感じで、加筆発行するかもしれませんが、
よろしくお願いします。
※あっ、うざいって人は、
http://www.mag2.com/m/0000099248.htm
でメルマガの方を解除して、
http://www.ken3.org/asp/
のHPをたまに覗きに来て下さい。
内容は同じなので。
何か読者の心に残れば、うれしいです。
*私の独り言をうまく消化してくださいね。
いつも失敗?のKen3でした。
~~~~~~~(↑オイオイ)
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告