方法: Visual Basic の GetOleDbSchemaTable メソッドを使用して Excel からメタデータを取得します。NET

文書翻訳 文書翻訳
文書番号: 318373
すべて展開する | すべて折りたたむ

目次

概要

この資料ではテーブルを取得する方法について説明します使用して、Microsoft Excel データ ソースから列メタデータを GetOleDbSchemaTable メソッドは、Microsoft OLE DB マネージ プロバイダーを使用して、Jet Microsoft OLE DB プロバイダー。

は、 GetOleDbSchemaTable 公開されるメソッドは、 System.Data.OleDb マイクロソフトのクラスです。NET Framework のですが。NET の後継は、 OpenSchema 以前のバージョンの Microsoft ActiveX のデータ オブジェクトのメソッド(ADO)。

技法の説明

ADO を使用して、Excel データ ソースに接続するとします。NET で、使用して、テーブルのメタデータの一覧を抽出します。 GetOleDbSchemaTable、別の引数を取得するのには、同じメソッドを使用して選択したテーブルの列のメタデータ。できます、 DataGridTableStyle 配置して、クエリの書式を設定するには、オブジェクト内のデータの結果します。グリッドです。

要件

次の一覧は、推奨されるハードウェア、ソフトウェアです、ネットワーク インフラストラクチャ、および service pack は必要があります。
  • Visual Studio。NET は、互換性のある Microsoft がインストールされてWindows オペレーティング システム
  • 少なくとも 1 つの Microsoft Excel ブック (.xls) ファイルをいくつかデータの行と列
この資料では、少なくとも基本的な知識があること前提としています次のトピックにします。
  • Visual Basic。NET
  • ADO.NET のデータ アクセス
  • Excel ブックとワークシート

サンプル

  1. Microsoft Visual Studio を起動します。Net を起動して、新しい画面を作成します。基本的です。NET の Windows アプリケーション プロジェクトです。
  2. 3 つを追加します。 ボタン コントロールと 2 つ データ グリッド デフォルトのフォーム (Form1) を制御します。変更は、 テキスト プロパティが ボタン コントロールに メタデータを取得します。, 形式のテーブルの一覧、、 形式の列一覧 それぞれ。
  3. フォームのコード モジュールに切り替えて、次の追加 インポート 最上位のステートメント:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. 次のモジュール レベルの宣言を挿入、 フォーム "継承 System.Windows.Forms.Form"行の後のクラスです。調整ファイルの接続文字列を Excel ブックにポイントに必要なこと一部の行と列のデータが含まれています。
        Dim cn As OleDbConnection
        Dim strCn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=c:\test.xls;Extended Properties=Excel 8.0"
        Dim dtTables As DataTable
        Dim WithEvents cm As CurrencyManager
        Dim dtColumns As DataTable
        Dim dvColumns As DataView
  5. 次のコードを挿入、 フォーム クラスの「Windows フォーム デザイナーで生成されたコード」領域の後に。このコードを呼び出す GetOleDbSchemaTable テーブルと列] の一覧で、ロードするが表示されます、 データ グリッド コントロール、および列の一覧の更新プログラムが選択されているテーブル変更します。
        Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
            Call GetTablesList()
        End Sub
    
        Private Sub GetTablesList()
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtTables = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            DataGrid1.DataSource = dtTables
            DataGrid1.ReadOnly = True
            cn.Close()
            Call GetColumnsList()
        End Sub
    
        Private Sub GetColumnsList()
            If cm Is Nothing Then
                cm = CType(Me.BindingContext(dtTables), CurrencyManager)
            End If
            Dim r As Integer = cm.Position
            Dim strTable As String = dtTables.Rows(r)("TABLE_NAME")
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtColumns = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, _
                New Object() {Nothing, Nothing, strTable, Nothing})
            dvColumns = New DataView(dtColumns)
            dvColumns.Sort = "ORDINAL_POSITION"
            DataGrid2.DataSource = dvColumns
            DataGrid2.ReadOnly = True
            cn.Close()
        End Sub
    
        Private Sub cm_PositionChanged(ByVal sender As Object, _
                ByVal e As System.EventArgs) Handles cm.PositionChanged
            Call GetColumnsList()
        End Sub
  6. 配置し、は、テーブルの書式を設定するのには、次のコードを挿入します。 データ グリッド 使用して TableStyles.使用注意してください。 PropertyDescriptor 既定以外の date 型の列の書式設定を容易にします。
        Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
            Call FormatTablesGrid(dtTables)
        End Sub
    
        Private Sub FormatTablesGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dt2format.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_NAME"
                .HeaderText = "Table Name"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_TYPE"
                .HeaderText = "Table Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            Dim cm As CurrencyManager = CType(Me.BindingContext(dt2format), CurrencyManager)
            Dim pd As PropertyDescriptor = cm.GetItemProperties()("DATE_CREATED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_CREATED"
                .HeaderText = "Date Created"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cm = CType(Me.BindingContext(dt2format), CurrencyManager)
            pd = cm.GetItemProperties()("DATE_MODIFIED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_MODIFIED"
                .HeaderText = "Date Modified"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid1.TableStyles.Add(gs)
            Me.Button2.Enabled = False
    
        End Sub
  7. 配置し、列の書式を設定するのには、次のコードを挿入します。データ グリッド 使用して TableStyle:
        Private Sub Button3_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button3.Click
            Call FormatColumnsGrid(dtColumns)
        End Sub
    
        Private Sub FormatColumnsGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dtColumns.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "COLUMN_NAME"
                .HeaderText = "Column Name"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "ORDINAL_POSITION"
                .HeaderText = "Ordinal Position"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "DATA_TYPE"
                .HeaderText = "Data Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "CHARACTER_MAXIMUM_LENGTH"
                .HeaderText = "Text Length"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "NUMERIC_PRECISION"
                .HeaderText = "Numeric Precision"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid2.TableStyles.Add(gs)
            Me.Button3.Enabled = False
    
        End Sub
  8. プロジェクトを実行します。
  9. クリックしてください。 メタデータを取得します。 入力するのには テーブル (DataGrid1) すべての列の情報を一覧表示します。各 Excel ブックでテーブルを返します GetOleDbSchemaTable.は、 一覧 (DataGrid2) の入力と同時にすべてのですが最初のテーブル内の列に対して返される情報の列は、 テーブル リストです。
  10. 別のテーブル内の選択、 テーブル リストです。は、 リストの変更を選択したテーブルの列を表示するのにはために cm_PositionChanged 実装するイベント ハンドラーです。
  11. クリックしてください。 形式のテーブルの一覧 定義し、TableMappingStyle に DataGrid1 を適用します。これになります列のヘッダーの「わかりやすい」との便利な 4 つの列のみを表示します。によって返される 9 つの列からのデータ GetOleDbSchemaTable.これらの列が表示されます。
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    これらの空白の列は表示されません。
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    説明
    TABLE_PROPID
  12. クリックしてください。 形式の列一覧 定義し、DataGrid2 に、TableMappingStyle を適用するには。これ列ヘッダーの「わかりやすい」なり便利 5 だけを表示します。28 によって返される列のデータの列 GetOleDbSchemaTable.
    COLUMN_NAME
    ORDINAL_POSITION
    DATA_TYPE
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    これらのほとんどの空白の列は表示されません。
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_NAME が (まだ)
    COLUMN_GUID
    COLUMN_PROPID
    COLUMN_HASDEFAULT (は、常に false)
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (常に true)
    TYPE_GUID
    CHARACTER_OCTET_LENGTH
    NUMERIC_SCALE
    DATETIME_PRECISION
    CHARACTER_SET_CATALOG
    CHARACTER_SET_SCHEMA
    CHARACTER_SET_NAME
    COLLATION_CATALOG
    COLLATION_SCHEMA
    COLLATION_NAME
    DOMAIN_CATALOG
    DOMAIN_SCHEMA
    ドメイン名
    説明
  13. 別を選択するのには、DataGrid1 で別の行をクリックします。テーブルです。は、 一覧は自動的に更新されます。TableStyles、以前に適用しました。 データ グリッド 有効です。

トラブルシューティング

  • によって返される列のデータ型 GetOleDbSchemaTable Excel データ ソースをすべての場合に、同じではない、によって返されるデータ型は、 OpenSchema ADO の従来の方法:
    元に戻す全体を表示する
    列のデータ型従来の ADOADO.NET OLEDB)
    数値5-adDouble5-OleDbType.Double
    通貨6-adCurrency6-OleDbType.Currency
    日付/時刻7-adDate7-OleDbType.Date
    ブール値11-adBoolean11-OleDbType.Boolean
    テキスト<>202-adVarWChar130-OleDbType.WChar
    メモ型203 adLongVarWChar-130-OleDbType.WChar
  • GetOleDbSchemaTable、と同様に OpenSchema、空の Excel ワークシートから、"F1"1 つの列が返されます。実際にはデータや列見出しは表示されません。

関連情報

の詳細については、「を表示するには、次の資料番号をクリックします。マイクロソフト サポート技術。
257819[Howto]: Visual Basic または VBA からのデータを Excel で ADO を使用します。

プロパティ

文書番号: 318373 - 最終更新日: 2011年7月27日 - リビジョン: 4.0
キーワード:?
kbhowtomaster kbprovider kbmt KB318373 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:318373
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com