[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.106 ADO Excel接続 シート名を取得したい .OpenSchema(adSchemaTables)

ADO Excel接続 シート名を取得したい .OpenSchema(adSchemaTables)


本文(発行内容)


こんにちは、三流プログラマーのKen3です。

今回は、
ADO Excel接続 で xxxx.xlsのシート名を取得
そんなことにチャレンジしてみたいと思います。

いつもの三流的なアプローチなので、実際はアレンジして使ってください。
※一部でも参考になればいいんだけど・・・

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

http://www.ken3.org/asp/backno/asp084.html からの書き込みで、 ---- >今回、はじめてASPでExcel操作をする事になり、右も左もわかりません。 >ひととおり読ませていただきましたが、おしえてください。 >シート名を取得するにはどうすれば良いのでしょうか? ---- と質問をもらう。

/* * 2.人間なってない 問題の解答 */

この質問に対して、 ---- >こんにちは。 >私もシート名の取得方法わからないのですが、 > >ADO テーブル名 取得 >の3つでGoogleを検索すると、 > >ADO と ADOX を組み合わせて SQL Server のテーブル一覧を取得します。 >http://homepage2.nifty.com/inform/vbdb/ado_sqlservertables.htm >なんてのがアリ、 > >SQLServerだとできそうですが、今回はxlsだからダメか・・・ >※ADO関係のプロパティやサイトを探ってみては? > >お力になれずスミマセン。 >他の場所で解決方法が見つかることを願いつつ失礼します。 >※回答を期待されていて待ちぼうけさせると悪いので、 > 短いけどすぐに返信しました・・・ ---- と、とんでもなく不親切な回答を・・・ ※なんとなくできそうなURL紹介して終わり...  社内の後輩だったら二度と質問こない先輩上司って感じで、感じ悪い。

/* * 3.なぜかいつも同じ目線に立てない私 */

性格がプログラムに出てくるとかよく聞くけど、 質問に対する回答で人間ができていないのがよくわかったり。 少し前、VBA系でも↓、 http://www.ken3.org/vba/backno/vba170.html >まるで腰高の内野手みたいな一歩も動く気ない回答だ。 >※サッカーの腰高ディフェンダー、バスケの棒立ち選手って感じかな。 > >いつから自分が嫌いな歳だけ高い(プライドも高い)プログラマーになっちまったんだ、 >動けよコラ、ボール(質問)に真剣に飛びつけよと思いつつ・・・ >(※自分から動けなくなった先輩プログラマーって...イヤだけど自分がなるとは・・) >けっ、プログラムや解説は三流でも、 >できない時の予防線のハリカタは超一流ですね。 >~~~~~~~~~~~~~~~~~~ >(※できないのを認めたくない、プライドだけが高いプログラマーって嫌だよね。 >  見習いたくないけど私みたいな先輩達が一部に居るのも(多い?)のも事実だったり) と、不親切さを書いてたのに直ってないねまったく。 動けよコラ(サンプル作れよ、動き出せよ)

/* * 4.資料を見つけ やっと動き出す */

チョット調べると、 [HOWTO] Visual Basic または VBA から ADO を Excel データで使用する http://support.microsoft.com/default.aspx?scid=kb;JA;257819#top の Excel のデータ ソース構造 (メタデータ) を取得する なんて感じの資料がMicrosoftから見つかる。 テーブル情報のクエリ Set rs = cn.OpenSchema(adSchemaTables) と書いてあり、 >Jet プロバイダは 9 つのフィールドを含むレコードセットを返します。 >そのうち次の 4 つのフィールドにのみ値が入力されています。 > table_name > table_type - "TABLE" または "SYSTEM TABLE" > date_created > date_modified >特定のテーブルの 2 つの日付フィールドには常に同じ値が表示されます。 >この値は "最終更新日" です。つまり、"date_created" は作成日を示して >いない場合があります。 > >ODBC プロバイダも 9 つのフィールドを含むレコードセットを返します。 >そのうち次の 3 つのフィールドにのみ値が入力されています。 > > table_catalog - ブックが存在するフォルダ > table_name > table_type - Jet プロバイダと同じ なんか調べられそうな予感がしたり。

/* * 5..OpenSchema(adSchemaTables)をテストする */

重い腰を上げ(だったら初めから動けよな) .OpenSchema(adSchemaTables)をテストする まずは、接続でしょ? 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") ↑オブジェクト作成して、 ↓接続文字列でファイルの場所+名前を指定するServer.MapPath("test057.xls") '接続文字列 strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("test057.xls") & ";" & _ "Extended Properties=Excel 8.0" 'データベース(xls)を開く db.open strCon DBとして、.xlsが開けたから、ここから探ってみます。 'adSchemaTables情報を開く Set Rs = db.OpenSchema(adSchemaTables) で、簡単に開けるみたい。 サンプルでは、手抜きで↓ Set Rs = db.OpenSchema(20) 'オイオイ20とか書くなよ(adSchemaTables=20なので) と、Constとか使わないで直値で20とか書いてるけど。 あとは、レコードをResponse.Writeで表示させるみたいに、 'テーブルでデータを表示する Response.Write "<TABLE border='1'>" '項目名の表示(Rsとレコードセットと同じく扱ってみた) Response.Write "<TR>" For Each FldA In Rs.Fields '項目分ループする Response.Write "<TH>" & FldA.Name & "</TH>" '.Nameで項目名を表示 Next Response.Write "</TR>" 'レコードが終了するまでループ(レコードって表現はチト変かな?) Do While Rs.EOF = False Response.Write "<TR>" For Each FldA In Rs.Fields '項目分ループする Response.Write "<TD>" & FldA.Value & "</TD>" '.Valueで値を表示 Next Response.Write "</TR>" Rs.MoveNext '次のレコードへ移動 Loop Response.Write "</TABLE>" 'テーブル終了 で、OKみたいです。 ※システム情報が詰まっているレコードにアクセスするイメージかなぁ??? http://www.ken3.org/cgi-bin/test/test106-1.asp で、テスト実行できます。 試してみてください。

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

今回は、 .OpenSchema(adSchemaTables) を使って、ADO Excel接続 したシート名を取得してみました。 人間性悪い三流プログラマーのサンプルですが、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。

フィードバック

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

評価・感想

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

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

三流君の主なリンク先

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

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

その他 宣伝広告