ΔΙΑΔΙΚΑΣΙΕΣ: Ανάκτηση μετα-δεδομένων από το Excel με χρήση της μεθόδου GetOleDbSchemaTable στη Visual Basic .NET

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 318373 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο ανάκτησης μετα-δεδομένα πινάκων και στηλών από αρχεία προέλευσης δεδομένων στο Microsoft Excel, χρησιμοποιώντας τοGetOleDbSchemaTableμέθοδος με το παροχής Microsoft OLE DB διαχειριζόμενων και η υπηρεσία παροχής Microsoft OLE DB για Jet.

Για ναGetOleDbSchemaTableη μέθοδος που εκτίθεται από τοSystem.Data.OleDbκλάση του Microsoft .NET Framework είναι η εξαρτώμενη εργασία .NET με τοOpenSchemaη μέθοδος σε παλαιότερες εκδόσεις του Microsoft ActiveX Data Objects (ADO).

Η τεχνική περιγραφή

Αφού συνδεθείτε με ένα αρχείο προέλευσης δεδομένων Excel χρησιμοποιώντας ADO.NET, εξαγάγετε μια λίστα με τα μετα-δεδομένα του πίνακα με χρήσηGetOleDbSchemaTable, και στη συνέχεια να χρησιμοποιήσετε την ίδια μέθοδο με διάφορα ορίσματα για να αποκτήσετε τα μετα-δεδομένα της στήλης για τον επιλεγμένο πίνακα. Μπορείτε επίσης να χρησιμοποιήσετε έναDataGridTableStyleαντικείμενο με διάταξη και μορφοποίηση του ερωτήματός σας οδηγεί σε ένα πλέγμα δεδομένων.

ΑΠΑΙΤΗΣΕΙΣ

Η ακόλουθη λίστα περιγράφει τα υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που θα χρειαστείτε:
  • Το Visual Studio .NET εγκατεστημένο σε ένα συμβατό λειτουργικό σύστημα των Microsoft Windows
  • Τουλάχιστον ένα αρχείο βιβλίου εργασίας (.xls) του Microsoft Excel με μερικές γραμμές και στήλες δεδομένων
Αυτό το άρθρο προϋποθέτει ότι έχετε τουλάχιστον βασική Εξοικείωση με τα ακόλουθα θέματα:
  • Visual Basic .NET
  • Η πρόσβαση δεδομένων ADO.NET
  • Βιβλία εργασίας του Excel και φύλλα εργασίας

ΔΕΙΓΜΑ

  1. Ξεκινήστε το Microsoft Visual Studio .NET και δημιουργήστε ένα νέο έργο της Visual Basic .NET Windows εφαρμογών.
  2. Προσθήκη τριώνΚουμπίτα στοιχεία ελέγχου και δύοΤο DataGridτα στοιχεία ελέγχου στην προεπιλεγμένη φόρμα (Φόρμα1). Αλλαγή τουTextη ιδιότητα από τοΚουμπίτα στοιχεία ελέγχουΗ ανάκτηση μετα-δεδομένων,Μορφή λίστας πινάκωνANDΜορφή λίστας στηλώναντίστοιχα.
  3. Μεταβείτε στη λειτουργική μονάδα κώδικα της φόρμας και προσθέστε τα εξήςΕισαγωγέςπροτάσεις από την αρχή:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Εισαγάγετε τις ακόλουθες δηλώσεις επίπεδο λειτουργικής μονάδας σε τοMAPIη κλάση μετά από τη γραμμή "Κληρονομεί 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. Εισαγάγετε τον ακόλουθο κώδικα στο στοMAPIη κλάση μετά από την περιοχή "Σχεδίαση φόρμας των Windows που δημιουργήθηκαν κώδικα". Καλεί αυτόν τον κωδικόGetOleDbSchemaTableΓια να φορτώσετε τις λίστες και τις στήλες πίνακα, συμπληρώνει τοΤο DataGridελέγχει και ενημερώνει τη λίστα στηλών όταν αλλάξει ο επιλεγμένος πίνακας.
        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. Εισαγάγετε τον ακόλουθο κώδικα για τη διάταξη και μορφοποίηση πίνακεςΤο DataGridμε τη χρήσηTableStyles. Σημειώστε τη χρήσηPropertyDescriptorΓια να διευκολυνθεί η μη προεπιλεγμένη μορφοποίηση των στηλών ημερομηνίας.
        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. Εισαγάγετε τον ακόλουθο κώδικα για τη διάταξη και να διαμορφώσετε τις στήλεςΤο DataGridμε τη χρήση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) σε λίστα με όλες τις στήλες πληροφοριών που επιστρέφονται για κάθε πίνακα από το βιβλίο εργασίας του ExcelGetOleDbSchemaTable. Για ναΣτήλεςλίστα (DataGrid2) συμπληρώνεται ταυτόχρονα με όλες τις στήλες πληροφοριών που επιστρέφονται για τις στήλες του πρώτου πίνακα με τοΠίνακεςΛίστα (List).
  10. Επιλέξτε έναν διαφορετικό πίνακα τουΠίνακεςΛίστα (List). Για ναΣτήλεςλίστα αλλάζουν για να εμφανίσετε τις στήλες από τον επιλεγμένο πίνακα εξαιτίας τηςcm_PositionChangedτο πρόγραμμα χειρισμού συμβάντων που θα υλοποιηθεί.
  11. Κάντε κλικΜορφή λίστας πινάκωνΓια να ορίσετε και να εφαρμόσετε μια TableMappingStyle DataGrid1. Αυτό καθιστά πιο "φιλικό" κεφαλίδες στήλης και εμφανίζει μόνο τις τέσσερις στήλες χρήσιμα δεδομένα από τις εννέα στήλες που επιστρέφονται απόGetOleDbSchemaTable. Εμφανίζονται οι εξής στήλες:
    TABLE_NAME
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    Αυτές οι στήλες κενά δεν εμφανίζονται:
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    Περιγραφή
    TABLE_PROPID
  12. Κάντε κλικΜορφή λίστας στηλώνΓια να ορίσετε και να εφαρμόσετε μια TableMappingStyle DataGrid2. Αυτό καθιστά πιο "φιλικό" κεφαλίδες στήλης και εμφανίζει μόνο τις πιο χρήσιμες 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 (πάντα αληθής)
    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
    Όνομα_τομέα (Domain_name)
    Περιγραφή
  13. Κάντε κλικ σε μια διαφορετική γραμμή στο DataGrid1 για να επιλέξετε ένα διαφορετικό πίνακα. Για ναΣτήλεςλίστα ενημερώνεται αυτόματα. Το TableStyles έχετε προηγουμένως εφαρμόσει σε κάθεΤο DataGridπαραμένουν σε ισχύ.

ΑΝΤΙΜΕΤΩΠΙΣΗ ΠΡΟΒΛΗΜΑΤΩΝ

  • Οι τύποι δεδομένων στήλης που επιστρέφονται απόGetOleDbSchemaTableγια το Excel ένα αρχείο προέλευσης δεδομένων δεν είναι πανομοιότυπα σε όλες τις περιπτώσεις στους τύπους δεδομένων που επιστρέφονται από τοOpenSchemaη μέθοδος στο κλασικό ADO:
    Σύμπτυξη αυτού του πίνακαΑνάπτυξη αυτού του πίνακα
    Ο τύπος στήληςΚλασική ADOADO.NET (OLE DB)
    Αριθμητικό5 adDouble5 OleDbType.Double
    Νομισματική μονάδα6 adCurrency6 - OleDbType.Currency
    Ημερομηνία/Ώρα (Date/Time)7 adDate7 - OleDbType.Date
    BOOLEAN11 adBoolean11 - OleDbType.Boolean
    Text<>202 adVarWChar130 - OleDbType.WChar
    Υπόμνημα (Memo)203 adLongVarWChar130 - OleDbType.WChar
  • GetOleDbSchemaTable, likeOpenSchema, returns a single column "F1" from an empty Excel worksheet, although in fact no data or column headings are present.

Αναφορές

Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
257819ΔΙΑΔΙΚΑΣΙΕΣ: Χρήση ADO με δεδομένα του Excel από τη Visual Basic ή τη VBA

Ιδιότητες

Αναγν. άρθρου: 318373 - Τελευταία αναθεώρηση: Τρίτη, 21 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
Λέξεις-κλειδιά: 
kbhowtomaster kbprovider kbmt KB318373 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:318373

Αποστολή σχολίων

 

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