Zum Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NET

Zusammenfassung

Dieser Artikel beschreibt die Verwendung ADO.NET zum Abrufen von Daten aus einer Microsoft Excel-Arbeitsmappe, Daten in einer vorhandenen Arbeitsmappe ändern oder eine neue Arbeitsmappe Daten hinzufügen. Zugriff auf Excel-Arbeitsmappen mit ADO.NET können Sie Jet OLE DB-Provider. Dieser Artikel enthält Informationen, die Sie benötigen, damit Sie Jet OLE DB-Provider verwenden können, wenn Excel die Zieldatenquelle ist.


Verwendung der Jet OLE DB-Provider mit Microsoft Excel-Arbeitsmappen

Das Microsoft Jet-Datenbankmodul kann Daten in Dateien zusätzlicher Datenbankformate, wie Excel-Arbeitsmappen über installierbare ISAM Indexed Sequential Access-Methode () Treiber zugreifen. Öffnen von Microsoft Jet 4.0 OLE DB Provider unterstützt externe Formate geben Sie die Datenbank in den erweiterten Eigenschaften für die Verbindung. Der Jet OLE DB-Provider unterstützt folgende Datenbank für Microsoft Excel-Arbeitsmappen:
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
Hinweis: Verwenden Sie den Excel 5.0-Quelldatenbanktyp für Arbeitsmappen von Microsoft Excel 5.0 und 7.0 (95) und den Excel 8.0-Quelldatenbanktyp für Microsoft Excel 8.0 (97), 9.0 (2000) und 10.0 (2002) Arbeitsmappen. Die Beispiele in diesem Artikel verwenden Excel-Arbeitsmappen in Excel 2000 und Excel 2002-Format.


Verbindungszeichenfolge

Für den Zugriff auf eine Excel-Arbeitsmappe mit dem Jet OLE DB-Provider verwendet eine Verbindungszeichenfolge, die die folgende Syntax:
Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Book1.xls; Erweiterte Eigenschaften = "Excel 8.0; HDR = YES; "
Geben Sie den vollständigen Pfad und Namen für die Arbeitsmappe Parameter Datenquelle in der Verbindungszeichenfolge. Der Erweiterte Parameter enthalten zwei Eigenschaften: eine Eigenschaft für die ISAM-Version und eine Eigenschaft angeben, ob die Tabelle(n) Kopfzeilen einschließen.

Mit Excel-Arbeitsmappen ist die erste Zeile in einem Bereich standardmäßig die Kopfzeile (oder Feldnamen). Wenn der erste Bereich keine Kopfzeilen enthält, können Sie HDR = NO in den erweiterten Eigenschaften der Verbindungszeichenfolge. Bei Angabe von HDR = NO in der Verbindungszeichenfolge Jet OLE DB-Provider automatisch Namen für die Felder für Sie (F1 das erste Feld repräsentiert, F2 für das zweite Feld usw.).

Datentypen

Im Gegensatz zu herkömmlichen Datenbanken gibt es keine direkte Möglichkeit, die Datentypen für Spalten in Excel-Tabellen angeben. OLE DB-Provider untersucht stattdessen eine acht Zeilen in einer Spalte Schätzung der Datentyp für das Feld. Sie können die Anzahl der Zeilen angeben einen Wert zwischen eins (1) und sechzehn (16) für die Einstellung MAXSCANROWS in den erweiterten Eigenschaften der Verbindungszeichenfolge ändern.

Namenskonventionen für Tabelle

Es gibt verschiedene Arten eine Tabelle (oder einen Bereich) verweisen können in eine Excel-Arbeitsmappe:
  • Verwenden Sie den Blattnamen gefolgt von einem Dollarzeichen (z. B. [Sheet1$] oder [My Worksheet$]). Eine Arbeitsmappe-Tabelle, die auf diese Weise verwiesen umfasst den gesamten Bereich des Arbeitsblattes.
    Wählen Sie * from [Sheet1$]
  • Verwenden Sie einen Bereich mit einem festgelegten Namen (z. B. [MyNamedRange]):
    Wählen Sie * aus [MyNamedRange]
  • Verwenden Sie einen Bereich mit einer bestimmten Adresse (z. B. [Sheet1$ A1: B10]):
    Wählen Sie * aus [Sheet1$ A1: B10]
Hinweis: den Tabellennamen folgende Dollarzeichen zeigt an, dass die Tabelle vorhanden ist. Wenn Sie eine neue Tabelle erstellen, wie in der
Erstellen Sie neue Arbeitsmappen und Tabellen Abschnitt dieses Artikels das Dollarzeichen nicht verwenden.

Verwendung von Excel-Arbeitsmappen als ADO.NET Data Sources

Datensätze abrufen

Sie können Datensätze aus einer Datenbank abrufen, mit zwei Ansätze in ADO.NET: mit einem Dataset oder DataReader.

Ein Dataset ist ein Cache mit Datensätzen aus einer Datenquelle abgerufen. Die Daten im Dataset ist in der Regel eine sehr abgespeckte Version der Datenbank. Allerdings können Sie damit genauso arbeiten, mit den tatsächlichen Daten arbeiten und ohne Verbindung zur Datenbank. Neben den Datenabruf auch können ein Dataset Sie Update-Operationen auf der zugrunde liegenden Datenbank.

Ein DataReader können Sie alternativ einen schreibgeschützten, vorwärtsgerichteten Datenstrom von einer Datenbank abzurufen. Wenn Sie verwenden die DataReader Programm Leistungssteigerungen und Systemaufwand verringert, da nur eine Zeile gleichzeitig im Arbeitsspeicher ist. Wenn Sie eine große Menge von Daten und nicht der zugrunde liegenden Datenbank ändern möchten, ist ein DataReader besser geeignet als ein Dataset.

Hinzufügen und Aktualisieren von Datensätzen

Mit ADO.NET können einfügen und Aktualisieren von Datensätzen in einer Arbeitsmappe auf drei Arten:
  • Direkt Befehl Einfügen oder Datensätze gleichzeitig aktualisieren. Dazu kann ein OLEDbCommand -Objekt für Ihre Verbindung erstellen und legen Sie die CommandText -Eigenschaft auf einen gültigen Befehl zum Einfügen von Datensätzen

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    oder einen Befehl zum Aktualisieren von Datensätzen

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    und rufen Sie die ExecuteNonQuery -Methode.
  • Ändern Sie ein DataSet mit einer Tabelle/Abfrage aus Excel gefüllt und rufen Sie die Update -Methode des DataAdapter zum Auflösen von DataSet in der Arbeitsmappe geändert. Jedoch parametrisierte Änderung die Update -Methode verwenden müssen festgelegten Auflösung Befehle für den DataAdapter InsertCommand
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    und UpdateCommand:
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    Parametrisierte INSERT- und UPDATE-Befehle sind erforderlich, da OleDbDataAdapter Schlüssel-/Indexinformationen für Excel-Arbeitsmappen nicht angegeben. ohne Schlüssel-/Indexfelder kann nicht CommandBuilder automatisch Befehle generieren.
  • Exportieren von Daten aus einer anderen Quelle in eine Excel-Arbeitsmappe andere Datenquelle mit dem Jet OLE DB-Provider verwendet werden. Datenquellen, die mit dem Jet OLE DB-Provider auf diese Weise verwendet werden können, gehören Textdateien, Microsoft Access-Datenbanken und natürlich andere Excel-Arbeitsmappen. Mit einem einzigen INSERT INTO-Befehl können Sie Daten aus einer anderen Tabelle/Abfrage in Ihre Arbeitsmappe exportieren:
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    INSERT INTO setzt voraus, dass die Zieltabelle (oder das Arbeitsblatt) bereits vorhanden. Daten werden an die Zieltabelle angehängt.

    Sie können auch wählen... IN der Tabelle/Abfrage in eine Arbeitsmappe exportieren:
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    Wenn Sie Select... Wenn die Zieltabelle oder-Arbeitsmappe nicht existiert, wird es für Sie erstellt. Wenn die Tabelle vor dem Wählen vorhanden... IN ausgegeben wird, erhalten Sie eine Fehlermeldung.
Beispielcode im Abschnitt weiter unten in diesem Artikel zeigt jeder dieser Ansätze hinzufügen und Aktualisieren von Datensätzen in einer Arbeitsmappe.

Löschen von Datensätzen

Obwohl Jet OLE DB-Provider können Sie Datensätze in einer Excel-Arbeitsmappe einfügen und aktualisieren, lässt keine Löschvorgänge zu. Wenn Sie versuchen, einen Löschvorgang für einen oder mehrere Datensätze ausführen, erhalten Sie folgende Fehlermeldung:
Löschen von Daten in einer verknüpften Tabelle wird von dieser ISAM nicht unterstützt.
Diese Einschränkung ist bei der Behandlung von Excel-Arbeitsmappen als Datenbanken.

Arbeitsmappen und Tabellen erstellen

Führen Sie zum Erstellen einer Tabelle in einer Excel-Arbeitsmappe CREATE TABLE-Befehl:
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
Wenn Sie diesen Befehl ausführen, wird ein neues Arbeitsblatt mit dem Namen der Tabelle erstellt in dem Befehl angegeben. Wenn die Arbeitsmappe für die Verbindung nicht vorhanden ist, wird es auch erstellt.

Die
Beispielcodeabschnitt illustriert die Verwendung den CREATE TABLE-Befehl zum Erstellen einer neuen Arbeitsmappe und Tabelle.

Schrittweise

Beispielcode

  1. Starten Sie ein neues Projekt in Visual Basic .NET Windows-Anwendung .

    Form1 wird standardmäßig erstellt.
  2. Fügen Sie sechs Optionsfeld-Steuerelemente und ein Button-Steuerelement zu Form1 hinzu.
  3. Wählen Sie alle Optionsfeld-Steuerelemente und die Size -Eigenschaft auf 200,24festgelegt.
  4. Klicken Sie im Menü Ansicht auf Code.
  5. Fügen Sie die folgende Zeile an den Anfang des Codemoduls:
    Imports System.Data.OleDb
  6. Fügen Sie folgenden Code in der Klasse Form :
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _               "Data Source=C:\ExcelData1.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=YES"""

    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\ExcelData2.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=YES"""

    Private m_sNorthwind = _
    "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"

    Private m_sAction As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    RadioButton1.Text = "Create_Workbook"
    RadioButton2.Text = "Retrieve_Records"
    RadioButton3.Text = "Add_Records"
    RadioButton4.Text = "Update_Records"
    RadioButton5.Text = "Update_Individual_Cells"
    RadioButton6.Text = "Use_External_Source"
    Button1.Text = "Go!"
    End Sub

    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
    RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
    m_sAction = sender.Text'Store the text for the selected radio button
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    ' Call the associated routine to add/update/modify the workbook.
    Select Case m_sAction
    Case "Create_Workbook" : Create_Workbook()
    Case "Retrieve_Records" : Retrieve_Records()
    Case "Add_Records" : Add_Records()
    Case "Update_Records" : Update_Records()
    Case "Update_Individual_Cells" : Update_Individual_Cells()
    Case "Use_External_Source" : Use_External_Source()
    End Select

    Catch ex As OleDbException
    Dim er As OleDbError
    For Each er In ex.Errors
    MsgBox(er.Message)
    Next
    Catch ex2 As System.InvalidOperationException
    MsgBox(ex2.Message)
    End Try


    End Sub

    Public Sub Create_Workbook()

    ' If the workbooks already exist, prompt to delete.
    Dim answer As MsgBoxResult
    If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
    answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
    "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
    If answer = MsgBoxResult.Yes Then
    If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
    If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
    Else
    Exit Sub
    End If
    End If

    '==========================================================================
    ' Create a workbook with a table named EmployeeData. The table has 3
    ' fields: ID (char 255), Name (char 255) and Birthdate (date).
    '==========================================================================
    Dim conn As New OleDbConnection()
    conn.ConnectionString = m_sConn1
    conn.Open()
    Dim cmd1 As New OleDbCommand()
    cmd1.Connection = conn
    cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
    cmd1.ExecuteNonQuery()
    cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
    cmd1.ExecuteNonQuery()
    conn.Close()

    '==========================================================================
    ' Create a workbook with a table named InventoryData. The table has 3
    ' fields: Product (char 255), Qty (float) and Price (currency).
    '==========================================================================

    conn.ConnectionString = m_sConn2
    conn.Open()
    Dim cmd2 As New OleDbCommand()
    cmd2.Connection = conn
    cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
    cmd2.ExecuteNonQuery()
    cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
    cmd2.ExecuteNonQuery()
    cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
    cmd2.ExecuteNonQuery()
    conn.Close()

    ' NOTE: You can ALTER and DROP tables in a similar fashion.

    End Sub

    Public Sub Retrieve_Records()

    '==========================================================
    'Use a DataReader to read data from the EmployeeData table.
    '==========================================================

    Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
    conn1.Open()
    Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
    Dim rdr As OleDbDataReader = cmd1.ExecuteReader

    Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
    Do While rdr.Read()
    Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
    rdr.GetString(0), rdr.GetString(1), _
    rdr.GetDateTime(2).ToString("d")))
    Loop
    rdr.Close()
    conn1.Close()

    '========================================================
    'Use a DataSet to read data from the InventoryData table.
    '========================================================
    Dim conn2 As New OleDbConnection(m_sConn2)
    Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
    Dim ds As DataSet = New DataSet()
    da.Fill(ds)
    Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
    Dim dr As DataRow
    For Each dr In ds.Tables(0).Rows'Show results in output window
    Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
    dr("Product"), dr("Qty"), dr("Price")))
    Next
    conn2.Close()

    End Sub

    Public Sub Add_Records()

    '==========================================================================
    ' Run an INSERT INTO command to add new records to the workbook.
    '==========================================================================
    Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
    conn1.Open()
    Dim cmd As New System.Data.OleDb.OleDbCommand()
    cmd.Connection = conn1
    cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
    cmd.ExecuteNonQuery()
    cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
    cmd.ExecuteNonQuery()
    conn1.Close()

    '====================================================================
    'Use the InsertCommand object to add new records to the InventoryData
    'table.
    '====================================================================
    Dim conn2 As New OleDbConnection(m_sConn2)
    Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
    Dim ds As DataSet = New DataSet()
    da.Fill(ds, "MyExcelTable")

    ' Generate the InsertCommand and add the parameters for the command.
    da.InsertCommand = New OleDbCommand( _
    "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
    da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
    da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
    da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"

    ' Add two new records to the dataset.
    Dim dr As DataRow
    dr = ds.Tables(0).NewRow
    dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
    dr = ds.Tables(0).NewRow
    dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)

    ' Apply the dataset changes to the actual data source (the workbook).
    da.Update(ds, "MyExcelTable")
    conn2.Close()

    End Sub

    Public Sub Update_Records()

    '==========================================================================
    ' Run an UPDATE command to change a record in the EmployeeData
    ' table.
    '==========================================================================
    Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
    conn1.Open()
    Dim cmd As New System.Data.OleDb.OleDbCommand()
    cmd.Connection = conn1
    cmd.CommandText = "UPDATE [EmployeeData$] " & _
    "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
    cmd.ExecuteNonQuery()
    conn1.Close()

    '====================================================================
    ' Use the UpdateCommand object to modify records in the InventoryData
    ' table.
    '====================================================================
    Dim conn2 As New OleDbConnection(m_sConn2)
    Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
    Dim ds As DataSet = New DataSet()
    da.Fill(ds, "MyInventoryTable")

    ' Generate the UpdateCommand and add the parameters for the command.
    da.UpdateCommand = New OleDbCommand( _
    "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
    da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
    da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
    da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")

    ' Update the first two records.
    ds.Tables(0).Rows(0)("Qty") = 1000
    ds.Tables(0).Rows(0)("Price") = 10.1
    ds.Tables(0).Rows(1)("Qty") = 2000
    ds.Tables(0).Rows(1)("Price") = 20.2

    ' Apply the dataset changes to the actual data source (the workbook).
    da.Update(ds, "MyInventoryTable")
    conn2.Close()

    End Sub

    Public Sub Update_Individual_Cells()

    '==========================================================================
    ' Update individual cells on the EmployeeData worksheet;
    ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================

    ' NOTE: The connection string indicates that the table does *NOT*
    ' have a header row.
    Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
    conn.Open()
    Dim cmd As New System.Data.OleDb.OleDbCommand()
    cmd.Connection = conn
    cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
    cmd.ExecuteNonQuery()
    cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
    cmd.ExecuteNonQuery()
    conn.Close()

    End Sub

    Public Sub Use_External_Source()

    ' Open a connection to the sample Northwind Access database.
    Dim conn As New System.Data.OleDb.OleDbConnection( _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
    conn.Open()
    Dim cmd As New System.Data.OleDb.OleDbCommand()
    cmd.Connection = conn

    '=======================================================================
    ' Run an INSERT..INTO command on the Northwind database to append
    ' the records from a table/query to an existing table in the Excel
    ' workbook.
    '=======================================================================
    cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
    "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
    cmd.ExecuteNonQuery()

    '==========================================================================
    ' Run a SELECT..INTO command on the Northwind database to insert
    ' all the records from a table/query into a new sheet in the Excel
    ' workbook.
    '==========================================================================
    cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
    "FROM [Product Sales for 1997]"
    cmd.ExecuteNonQuery()

    conn.Close()

    End Sub
  7. Ändern Sie gegebenenfalls den Pfad zu der Access-Beispieldatenbank Northwind, für den M_sNorthwind-Member im Code.

Probieren Sie es aus

  1. Im Menü Ansicht auf Andere Fensterund klicken Sie dann auf Ausgabe , um das Ausgabefenster anzuzeigen.
  2. Drücken Sie F5, um das Programm ausführen.
  3. Create_Workbook auf, und klicken Sie dann auf OK. Die Create_Workbook Prozedur führt CREATE TABLE-Befehle, um zwei neue Arbeitsmappen zu erstellen: C:\ExcelData1.xls und C:\ExcelData2.xls. ExcelData1.xls enthält eine Tabelle mit dem Namen EmployeeData und ExcelData2.xls eine Tabelle namens "EmployeeData". Die Tabellen sind mit Datensätzen gefüllt.

    Hinweis: bei jedem verbleibendem Schritt in diesem Test die Arbeitsmappen in Excel Ergebnisse zu öffnen. Oder klicken Sie zum Anzeigen des Inhalts der Tabellen in der Ausgabe -Fenster von Visual Studio .NET Retrieve_Records .
  4. Retrieve_Records auf, und klicken Sie dann auf OK. Retrieve_Records Prozedur extrahiert die Sätze aus den Tabellen und zeigt im Ausgabefenster ähnelt :
    EmployeeData:
    =============
    AAA Andrew 12/4/1955

    InventoryData:
    ==============
    Cola 200 1.35
    Chips 550 0.89
  5. Add_Records auf, und klicken Sie dann auf OK. Die Routine Add_Records hinzugefügt jeder Tabelle zwei Datensätze:
    EmployeeData:
    =============
    AAA Andrew 12/4/1955
    CCC Charlie 10/14/1948
    DDD Deloris 7/19/1998

    InventoryData:
    ==============
    Cola 200 1.35
    Chips 550 0.89
    Bread 390 1.89
    Milk 99 2.59
  6. Update_Records auf, und klicken Sie dann auf OK. Die Routine Update_Records aktualisiert zwei Sätze in jeder Arbeitsmappe:
    EmployeeData:
    =============
    AAA Aaron 5/4/1975
    CCC Charlie 10/14/1948
    DDD Deloris 7/19/1998

    InventoryData:
    ==============
    Cola 1000 10.1
    Chips 2000 20.2
    Bread 390 1.89
    Milk 99 2.59
  7. Update_Individual_Cells auf, und klicken Sie dann auf OK. Die Routine Update_Individual_Cells ändert bestimmte Daten im Arbeitsblatt EmployeeData in ExcelData1.xls; Insbesondere werden die Zellen F3, G3 und I4 aktualisiert.
  8. Use_External_Source auf, und klicken Sie dann auf OK. Wenn Sie ein INSERT... IN Befehl fügt die Routine Use_External_Source Datensätze aus der Northwind-Tabelle 'Employees' im Arbeitsblatt EmployeeData in ExcelData1.xls. Und Use_External_Source verwendet eine SELECT... Befehl zum Erstellen einer neuen Tabelle (oder Blatt) in ExcelData2.xls enthält, alle Datensätze aus der Northwind Tabelle 'Products'.

    Hinweis: Wenn Sie mehr als einmal Use_External_Source klicken, Mitarbeiter-Liste angefügt wird mehrmals da Primärschlüssel nicht erkannt oder erzwungen wird.

Zelle formatieren

Wenn Sie zum Hinzufügen oder Aktualisieren von Datensätzen in einer vorhandenen Arbeitsmappe ADO.NET verwenden, können Sie Zellformat der Arbeitsmappe mit den neuen oder aktualisierten Datensätze anwenden. Wenn Sie einen vorhandenen Datensatz (oder Zeile) in einer Arbeitsmappe aktualisieren, wird die Formatierung beibehalten. Und wenn Sie einen neuen Datensatz (oder Zeile) in einer Arbeitsmappe einfügen, übernimmt der neue Datensatz Formatierung der darüber liegenden Zeile.

Das folgende Verfahren zeigt, wie Sie Formatierung in einer Arbeitsmappe mit dem Beispielcode:
  1. Drücken Sie F5, um das Beispiel auszuführen.
  2. In Form1 Create_Workbook auf, und klicken Sie dann auf OK.
  3. Starten Sie Microsoft Excel, und öffnen Sie C:\ExcelData1.xls.
  4. Anwenden einer Formatvorlage fett in Zelle A2.
  5. Kursiv, Unterstreichung in Zelle B2 und zentriert.
  6. Zelle C2 ein langes Datumsformat zuweisen.
  7. Speichern Sie und schließen Sie C:\ExcelData1.xls.
  8. In Form1 Add_Records auf, und klicken Sie dann auf OK.
  9. Öffnen Sie C:\ExcelData1.xls in Excel, und beachten Sie, dass zwei neuen Zeilen haben die Formatierung aus der ersten Zeile.

Einschränkungen

Im folgenden sind einige Nachteile der Jet OLE DB Provider in Bezug auf Excel-Datenquellen:
  • Sie können keine Formeln in Zellen mit ADO.NET einfügen.
  • Der Jet OLE DB-Provider kann keine Schlüssel-/Indexinformationen für Tabellen in einer Excel-Arbeitsmappe bereitstellen. CommandBuilder können Sie deshalb automatisch Updates und Einfügevorgängen für Datensätze in einer Excel-Arbeitsmappe generieren.

Referenzen

Klicken Sie für weitere Informationen auf die folgenden Artikelnummern, um die betreffenden Artikel in der Microsoft Knowledge Base anzuzeigen:

316756 PRB: Fehler tritt auf, wenn Sie ADO.NET OLEDbDataAdapter Excel-Arbeitsmappe ändern

257819 Verwendung von ADO mit Excel-Daten von Visual Basic oder VBA
306022 wie übertragen von Daten in eine Excel-Arbeitsmappe mit Visual Basic .NET

306023 wie übertragen von Daten in eine Excel-Arbeitsmappe mit Visual C# .NET

311731 zum Abfragen und Anzeigen von Excel-Daten mit ASP.NET und ADO.NET mit Visual Basic .NET

306572 zum Abfragen und Anzeigen von Excel-Daten mit ASP.NET ADO.NET und Visual C# .NET

278973 Beispiel: ExcelADO zeigt, wie ADO zum Lesen und Schreiben von Daten in Excel-Arbeitsmappen



Eigenschaften

Artikelnummer: 316934 – Letzte Überarbeitung: 21.01.2017 – Revision: 2

Feedback