Dieser Artikel beschreibt, wie Sie mit ADO.NET Daten aus einer Microsoft Excel-Arbeitsmappe abrufen, Daten in einer vorhandenen Arbeitsmappe ändern oder Daten zu einer neuen Arbeitsmappe hinzufügen können. Sie können den Jet OLE DB-Provider verwenden, um mit ADO.NET auf Excel-Arbeitsmappen zuzugreifen. Dieser Artikel liefert Ihnen die Informationen, die Sie für die Verwendung des Jet OLE DB-Provider benötigen, wenn Excel die Zieldatenquelle ist.
Verwendung des Jet OLE DB-Provider mit Microsoft Excel-Arbeitsmappen
Mit dem Microsoft Jet-Datenbankmodul können Sie über nachträglich zu installierende ISAM-Treiber (ISAM = Indexed Sequential Access Method) auf Daten in Dateien zusätzlicher Datenbankformate zugreifen, z. B. auf Excel-Arbeitsmappen. Geben Sie den Datenbanktyp in den erweiterten Eigenschaften ("Extended Properties") für die Verbindung an, um externe Formate zu öffnen, die vom Microsoft Jet 4.0 OLE DB Provider unterstützt werden. Der Jet OLE DB Provider unterstützt in Verbindung mit Excel-Arbeitsmappen die folgenden Datenbanktypen:
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
Hinweis: Verwenden Sie den Quelldatenbanktyp "Excel 5.0" für Arbeitsmappen in Microsoft Excel 5.0 und 7.0 (95) und den Quelldatenbanktyp "Excel 8.0" für Arbeitsmappen in Microsoft Excel 8.0 (97), 9.0 (2000) und 10.0 (2002). Die Beispiele in diesem Artikel verwenden Excel-Arbeitsmappen im Excel 2000- und Excel 2002-Format.
Verbindungszeichenfolge
Verwenden Sie eine Verbindungszeichenfolge mit folgender Syntax, um mit dem Jet OLE DB-Provider auf eine Excel-Arbeitsmappe zuzugreifen:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"
Geben Sie in der Verbindungszeichenfolge den vollständigen Pfad und Dateinamen für die Arbeitsmappe im Parameter
Data Source an. Der Parameter
Extended Properties kann zwei Eigenschaften enthalten: eine Eigenschaft für die ISAM-Version und eine Eigenschaft, die angibt, ob die Tabelle(n) Kopfzeilen enthält bzw. enthalten.
Bei Excel-Arbeitsmappen ist die erste Zeile in einem Bereich standardmäßig die Kopfzeile (Feldnamen). Wenn die erste Zeile Spaltenüberschriften enthält, können Sie in den erweiterten Eigenschaften der Verbindungszeichenfolge HDR=NO angeben. Wenn Sie in der Verbindungszeichenfolge HDR=NO angeben, vergibt der Jet OLE DB-Provider automatisch Namen für die Felder (F1 für das erste Feld, F2 für das zweite Feld usw.).
Datentypen
Im Gegensatz zu herkömmlichen Datenbanken gibt es bei Excel-Tabellen keine Möglichkeit, die Datentypen der Spalten direkt zu bestimmen. Der OLE DB Provider untersucht stattdessen eine acht Zeilen in einer Spalte, um den Datentyp des Feldes zu
erraten. Sie können die Anzahl der zu durchsuchenden Zeilen ändern, indem Sie in den "Extended Properties" Ihrer Verbindungszeichenfolge einen Wert zwischen eins (1) und sechzehn (16) für die Einstellung MAXSCANROWS angeben.
Konventionen für die Benennung von Tabellen
Sie können auf mehrere Arten auf eine Tabelle oder einen Bereich in einer Excel-Arbeitsmappe verweisen:
Hinweis: Das auf den Tabellennamen folgende Dollarzeichen zeigt an, dass die Tabelle vorhanden ist. Wenn Sie eine neue Tabelle erstellen wie im Abschnitt
Neue Arbeitsmappen und Tabellen erstellen in diesem Artikel beschrieben, verwenden Sie das Dollarzeichen nicht.
Verwendung von Excel-Arbeitsmappen als ADO.NET-Datenquellen
Datensätze abrufen
Sie haben in ADO.NET zwei Möglichkeiten, Sätze aus einer Datenbank abzurufen: mit einem
DataSet oder einem
DataReader.
Ein
Dataset ist ein Cache mit Datensätzen, die aus einer Datenquelle abgerufen wurden.Bei den Daten im
Dataset handelt es sich in der Regel um eine stark reduzierte Version des Datenbankinhalts.Sie können damit jedoch ohne Verbindung zur Datenbank genauso arbeiten wie mit den eigentlichen Daten. Neben dem Abrufen von Daten können Sie ein
DataSet auch zur Aktualisierung der zu Grunde liegenden Datenbank verwenden.
Alternativ können Sie einen
DataReader verwenden, um einen schreibgeschützten, vorwärtsgerichteten Datenstrom von einer Datenbank abzurufen. Durch die Verwendung des
DataReader-Programms verbessert sich die Leistung, und die Systembelastung verringert sich, da sich jeweils nur eine Zeile im Speicher befindet. Wenn Sie ein großes Datenvolumen abzurufen haben und nicht beabsichtigen, die zu Grunde liegende Datenbank zu ändern, ist ein
DataReader gegenüber einem
Dataset zu bevorzugen.
Datensätze hinzufügen und aktualisieren
ADO.NET bietet drei Möglichkeiten, Datensätze in einer Arbeitsmappe einzufügen und zu aktualisieren:
- Führen Sie einen Befehl direkt aus, um Datensätze einzeln nacheinander einzufügen oder zu aktualisieren. Dazu können Sie ein OLEDbCommand-Objekt für Ihre Verbindung erstellen und seine Eigenschaft CommandText 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'
einstellen und dann die Methode ExecuteNonQuery aufrufen. - Ändern Sie ein DataSet, das Sie mit einer Tabelle/Abfrage aus einer Excel-Arbeitsmappe gefüllt haben, und rufen Sie dann die Methode Update des DataAdapter auf, um die Arbeitsmappe mit den Änderungen aus dem DataSet zu aktualisieren. Um jedoch die Methode Update für die Aktualisierung verwenden zu können, müssen Sie parametrisierte Befehle für den InsertCommand
INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
und UpdateCommand des DataAdapter verwenden: UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
Parametrisierte INSERT- und UPDATE-Befehle sind erforderlich, da der OleDbDataAdapter keine Schlüssel-/Indexinformationen für Excel-Arbeitsmappen liefert. Ohne Schlüssel-/Indexfelder kann der CommandBuilder die Befehle nicht automatisch generieren. - Exportieren Sie Daten aus einer anderen Datenquelle in eine Excel-Arbeitsmappe, vorausgesetzt, die andere Datenquelle kann in Verbindung mit dem Jet OLE DB-Provider verwendet werden. Zu den Datenquellen, die Sie auf diese Weise in Verbindung mit dem Jet OLE DB-Provider verwenden 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 ist; die Daten werden an die Zieltabelle angehängt.
Sie können Ihre Tabelle/Abfrage auch mit SELECT..INTO in eine Arbeitsmappe exportieren: SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
Wenn Sie SELECT..INTO verwenden und die Zieltabelle oder -arbeitsmappe nicht existiert, wird sie erstellt. Wenn die Tabelle bereits vorhanden ist, bevor der Befehl SELECT..INTO ausgegeben wird, wird eine Fehlermeldung angezeigt.
Der Abschnitt
Beispielcode in diesem Artikel veranschaulicht die verschiedenen Möglichkeiten zum Hinzufügen und Aktualisieren von Datensätzen in einer Arbeitsmappe.
Datensätze löschen
Zwar können Sie mit dem Jet OLE DB-Provider Datensätze in einer Excel-Arbeitsmappe einfügen und aktualisieren, Löschvorgänge sind jedoch nicht möglich. Wenn Sie versuchen, einen oder mehrere Datensätze zu löschen, wird folgende Fehlermeldung angezeigt:
DISAM unterstützt das Löschen von Daten in einer verknüpften Tabelle nicht.
Diese Einschränkung hängt mit der Behandlung von Excel-Arbeitsmappen als Datenbanken zusammen.
Neue Arbeitsmappen und Tabellen erstellen
Führen Sie den Befehl CREATE TABLE aus, um eine Tabelle in einer Excel-Arbeitsmappe zu erstellen:
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, den Sie im Befehl angegeben haben.
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
Wenn die Arbeitsmappe für die Verbindung nicht vorhanden ist, wird sie erstellt.
Sample CodeDer Abschnitt Beispielcode veranschaulicht, wie Sie mit dem Befehl CREATE TABLE eine neue Arbeitsmappe und Tabelle erstellen können.
Vorgehensweise
Beispielcode
- Starten Sie ein neues Microsoft Visual Basic .NETWindows-Anwendungs-Objekt.
Form1 wird standardmäßig erstellt. - Fügen Sie in Form1 sechs Optionsfeld-Steuerelemente und ein Schaltflächen-Steuerelement hinzu.
- Markieren Sie alle Optionsfeld-Steuerelemente und stellen Sie die Eigenschaft Size (Größe) auf 200,24 ein.
- Klicken Sie im Menü Ansicht auf Code.
- Fügen Sie die folgende Zeile ganz am Anfang des Codemoduls hinzu:
Imports System.Data.OleDb
- Fügen Sie in der Klasse Form den folgenden Code ein:
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 - Ändern Sie den Pfad zur Access-Beispieldatenbank "Northwind" für das Element "m_sNorthwind" im Code, sofern erforderlich.
Testen der Anwendung
- Zeigen Sie im Menü Ansicht auf Andere Fenster. Klicken Sie auf Ausgabe, um das Fenster Ausgabe anzuzeigen.
- Drücken Sie die Taste [F5], um das Programm erstellen und ausführen zu lassen.
- Klicken Sie auf Create_Workbook und dann auf Go. Die Prozedur Create_Workbook führt CREATE TABLE-Befehle aus, um zwei neue Arbeitsmappen zu erstellen: "C:\ExcelData1.xls" und "C:\ExcelData2.xls". "ExcelData1.xls" enthält ein Blatt (eine Tabelle) namens "EmployeeData". "ExcelData2.xls" enthält ein Blatt (eine Tabelle) namens "InventoryData". Die Tabellen sind mit Datensätzen gefüllt.
Hinweis: Öffnen Sie bei jedem verbleibendem Schritt in diesem Test die Arbeitsmappen in Excel, um die Ergebnisse zu prüfen. Oder klicken Sie auf Retrieve_Records, um den Inhalt der Tabelle(n) im Fenster Ausgabe von Visual Studio .NET anzuzeigen. - Klicken Sie auf Retrieve_Records und dann auf Go. Die Prozedur Retrieve_Records extrahiert die Sätze aus den Tabellen und zeigt sie etwa so im Fenster Ausgabe an:
EmployeeData:
=============
AAA Andrew 12/4/1955
InventoryData:
==============
Cola 200 1.35
Chips 550 0.89
- Klicken Sie auf Add_Records und dann auf Go. Die Routine Add_Records fügt in jeder Tabelle zwei Sätze hinzu:
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
- Klicken Sie auf Update_Records und dann auf Go. 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
- Klicken Sie auf Update_Individual_Cells und dann auf Go. Die Routine Update_Individual_Cells ändert bestimmte Daten im Arbeitsblatt "EmployeeData in "ExcelData1.xls"; insbesondere werden die Zellen F3, G3 und I4 aktualisiert.
- Klicken Sie auf Use_External_Source und dann auf Go. Wenn Sie einen INSERT..INTO-Befehl verwenden, hängt die Routine Use_External_Source Datensätze aus der Northwind-Tabelle 'Employees' an das Arbeitsblatt "EmployeeData" in "ExcelData1.xls" an. Außerdem verwendet Use_External_Source einen SELECT..INTO-Befehl, um in "ExcelData2.xls" eine neue Tabelle (Arbeitsblatt) zu erstellen, die alle Datensätze aus der Northwind-Tabelle 'Products' enthält.
Hinweis: Wenn Sie mehr als einmal auf Use_External_Source klicken, wird die Liste "Employees" mehrfach angehängt, da der Primärschlüssel nicht erkannt oder erzwungen wird.
Formatierung der Zellen
Wenn Sie ADO.NET dazu verwenden, Datensätze in einer vorhandenen Arbeitsmappe hinzuzufügen oder zu aktualisieren, können Sie Zellen in der Arbeitsmappe formatieren, die für die neuen oder aktualisierten Datensätze verwendet wird. Wenn Sie einen vorhandenen Datensatz (eine Zeile) in einer Arbeitsmappe aktualisieren, wird die Zellenformatierung beibehalten. Wenn Sie einen neuen Datensatz (Zeile) in einer Arbeitsmappe einfügen, übernimmt der neue Datensatz die Formatierung der vorhergehenden Zeile.
Die folgende Vorgehensweise zeigt, wie Sie mit dem Beispielcode die Formatierung in einer Arbeitsmappe anwenden können:
- Drücken Sie die Taste [F5], um das Beispiel zu erstellen und auszuführen.
- Klicken Sie in Form1 auf Create_Workbook und dann auf Go.
- Starten Sie Microsoft Excel und öffnen Sie "C:\ExcelData1.xls".
- Formatieren Sie die Zelle A2 fett.
- Formatieren Sie die Zelle B2 kursiv und unterstrichen und wählen Sie die zentrierte Ausrichtung.
- Wählen Sie ein langes Datumsformat für die Zelle C2.
- Speichern und schließen Sie "C:\ExcelData1.xls".
- Klicken Sie in Form1 auf Create_Workbook und dann auf Go.
- Öffnen Sie "C:\ExcelData1.xls" in Excel. Beachten Sie, dass die zwei neuen Zeilen die Formatierung der ersten Zeile übernommen haben.
Einschränkungen
Folgende Einschränkungen bestehen beim Jet OLE DB-Provider hinsichtlich Excel-Datenquellen:
- Sie können mit ADO.NET keine Formeln in Zellen einfügen.
- Der Jet OLE DB-Provider kann für Tabellen in einer Excel-Arbeitsmappe keine Schlüssel-/Indexdaten liefern. Deshalb können Sie den CommandBuilder nicht dazu verwenden, Datensätze in einer Excel-Arbeitsmappe automatisch zu aktualisieren und einzufügen.
Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
316756
(http://support.microsoft.com/kb/316756/DE/
)
PRB: Fehler tritt auf, wenn Sie ADO.NET OLEDbDataAdapter verwenden, um Excel-Arbeitsmappe zu ändern
257819
(http://support.microsoft.com/kb/257819/DE/
)
SO WIRD'S GEMACHT: Verwenden von ADO mit Excel-Daten von Visual Basic oder VBA
306022
(http://support.microsoft.com/kb/306022/DE/
)
SO WIRD'S GEMACHT: Übertragen von Daten in eine Excel-Arbeitsmappe mit Visual Basic .NET
306023
(http://support.microsoft.com/kb/306023/DE/
)
Wie Übertragen von Daten, indem Visual C# 2005 oder Visual C# verwendet, in einer Excel-Arbeitsmappe
311731
(http://support.microsoft.com/kb/311731/DE/
)
SO WIRD'S GEMACHT: Abfragen und Anzeigen von Excel-Daten mit ASP.NET und Visual Basic .NET
306572
(http://support.microsoft.com/kb/306572/DE/
)
SO WIRD'S GEMACHT: Abfragen und Anzeigen von Excel-Daten mit ASP.NET, ADO.NET und Visual C# .NET
278973
(http://support.microsoft.com/kb/278973/DE/
)
BEISPIEL: ExcelADO zeigt, wie ADO zum Lesen und Schreiben von Daten in Excel-Arbeitsmappen verwendet wird