Übertragen von Daten in eine Excel-Arbeitsmappe mit Visual Basic .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 306022 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
306022 How to transfer data to an Excel workbook by using Visual Basic .NET
Eine Version dieses Artikels für Microsoft Visual C# .NET finden Sie unter 306023 .
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt Schritt für Schritt verschiedene Verfahren zum Übertragen von Daten aus einem Visual Basic .NET-Programm in Excel 2002. Außerdem werden in diesem Artikel die jeweiligen Vor- und Nachteile dieser Verfahren erläutert, sodass Sie die Lösung wählen können, die für Ihre spezifische Situation am besten geeignet ist.

Überblick

Das am häufigsten verwendete Verfahren zum Übertragen von Daten in eine Excel-Arbeitsmappe ist die Automatisierung. Mithilfe der Automatisierung können Sie Methoden und Eigenschaften aufrufen, die für bestimmte Excel-Tasks spezifisch sind. Die Automatisierung gewährt Ihnen die größtmögliche Flexibilität beim Festlegen des Speicherorts von Daten innerhalb Ihrer Arbeitsmappe und eröffnet Ihnen zudem die Möglichkeit, zur Laufzeit die Arbeitsmappe zu formatieren und diverse Einstellungen festzulegen.

In Verbindung mit der Automatisierung können Sie diverse Verfahren zum Übertragen Ihrer Daten verwenden:
  • Übertragen von Daten Zelle für Zelle.
  • Übertragen von Daten von einem Array auf einen Zellbereich.
  • Übertragen von Daten von einem ADO-Recordset auf einen Zellbereich mithilfe der Methode CopyFromRecordset.
  • Erstellen eines Abfragetabellen-Objekts auf einem Excel-Arbeitsblatt, das die Ergebnisse einer Abfrage bei einer ODBC- oder OLEDB-Datenquelle enthält.
  • Übertragen der Daten in die Zwischenablage und nachfolgendes Einfügen des Inhalts der Zwischenablage in ein Excel-Arbeitsblatt.
Sie können außerdem diverse weitere Verfahren zum Übertragen von Daten nach Excel anwenden, bei denen nicht notwendigerweise auch die Automatisierung zum Einsatz kommt.Auch das Ausführen eines serverseitigen Programms kann eine gute Vorgehensweise sein, die Hauptlast der Datenverarbeitung von Ihren Clients fern zu halten.

Mit den folgenden Verfahren können Sie Daten ohne Automatisierung übertragen:
  • Übertragen von Daten in eine Tabstopp- oder Trennzeichen-getrennte Textdatei, die Excel später in die Zellen auf einem Arbeitsblatt auflösen kann.
  • Übertragen von Daten auf ein Arbeitsblatt mithilfe von ADO.NET.
  • Übertragen von XML-Daten nach Excel (nur Version 2002), um Daten zu erhalten, die formatiert und in Zeilen und Spalten angeordnet sind.

Verfahren

Verwendung der Automatisierung zum Übertragen von Daten Zelle für Zelle

Mithilfe der Automatisierung können Sie wie folgt Daten Zelle für Zelle auf ein Arbeitsblatt übertragen.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = "Doe"
        oSheet.Range("B2").Value = "John"

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
Das Übertragen von Daten Zelle für Zelle bietet sich dann an, wenn die Menge der zu übertragenden Daten nicht zu groß ist. Dabei haben Sie die Flexibilität, die Daten an beliebiger Stelle in der Arbeitsmappe einfügen und die Zellen zur Laufzeit bedingt formatieren zu können. Diese Vorgehensweise ist jedoch nicht zu empfehlen, wenn große Datenmengen in eine Excel-Arbeitsmappe übertragen werden müssen. Jedes Range-Objekt, das Sie zur Laufzeit erfassen, führt zu einer Schnittstellenanforderung. Daher kann ein solcher Datentransfer langsam sein.
Außerdem gilt in Microsoft Windows 95, Microsoft Windows 98 und Microsoft Windows Millennium Edition (Me) eine Obergrenze von 64 KB für Schnittstellenanforderungen. Erreicht oder überschreitet der Umfang Ihrer Schnittstellenanforderungen 64 KB, reagiert der Automatisierungsserver (Excel) eventuell nicht mehr, oder Ihnen kann eine Fehlermeldung angezeigt werden, die besagt, dass nicht genügend Speicher verfügbar ist. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
216400 PRB: Prozessübergreifend-COM-Automatisierungsschnittstelle kann Clientanwendung auf Win95/98 hängen
Auch hier ist das Übertragen von Daten Zelle für Zelle nur bei kleinen Datenmengen zu empfehlen. Falls Sie große Datenmengen nach Excel übertragen müssen, sollten Sie eines der anderen in diesem Artikel erläuterten Verfahren in Erwägung ziehen.

Weitere Informationen sowie ein Beispiel dafür, wie Sie Excel mit Visual Basic .NET automatisieren können, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
301982 Automatisieren von Microsoft Excel mit Visual Basic .NET

Verwendung der Automatisierung zum Übertragen eines Arrays mit Daten auf einen Bereich in einem Arbeitsblatt

Ein Array mit Daten kann wie folgt gleichzeitig auf einen Bereich mit mehreren Zellen übertragen werden:
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Create an array with 3 columns and 100 rows.
        Dim DataArray(99, 2) As Object
        Dim r As Integer
        For r = 0 To 99
            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
            DataArray(r, 1) = Rnd() * 1000
            DataArray(r, 2) = DataArray(r, 1) * 0.07
        Next

        'Add headers to the worksheet on row 1.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Order ID"
        oSheet.Range("B1").Value = "Amount"
        oSheet.Range("C1").Value = "Tax"

        'Transfer the array to the worksheet starting at cell A2.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book2.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
Wenn Sie Ihre Daten unter Verwendung eines Arrays statt Zelle für Zelle übertragen, können Sie bei großen Datenmengen eine erhebliche Leistungsverbesserung erzielen. Beachten Sie die folgende Zeile aus dem obigen Code, mit der Daten auf 300 Zellen in dem Arbeitsblatt übertragen werden:
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
				
Diese Zeile repräsentiert zwei Schnittstellenanforderungen: Eine für das Objekt Bereich, das von der Methode Range (Bereich) zurückgegeben wird, und eine weitere für das Objekt Bereich das von der Methode Resize (Größe anpassen) zurückgegeben wird. Im Gegensatz dazu fallen bei einer Übertragung der Daten Zelle für Zelle 300 Schnittstellenanforderungen für Objekte des Typs Bereich an.Wann immer dies möglich ist, sollten Sie die Vorteile einer Datenübertragung in einem einzigen Gesamtpaket nutzen, die insbesondere in einer Reduzierung der Anzahl an Schnittstellenanforderungen liegen.

Verwendung der Automatisierung zum Übertragen eines ADO-Recordsets auf einen Arbeitsblattbereich

Die Objektmodelle für Excel 2000 und Excel 2002 bieten die Methode CopyFromRecordset zum Übertragen eines ADO-Recordsets auf einen Bereich in einem Arbeitsblatt. Der folgende Code veranschaulicht, wie Sie Excel so automatisieren können, dass der Inhalt der Tabelle "Bestellungen" (Orders) aus der Beispieldatenbank "Nordwind" mithilfe der Methode CopyFromRecordset übertragen wird:
        'Create a Recordset from all the records in the Orders table.
        Dim sNWind As String
        Dim conn As New ADODB.Connection()
        Dim rs As ADODB.Recordset
        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";")
        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)

        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Transfer the field names to Row 1 of the worksheet:
        'Note: CopyFromRecordset copies only the data and not the field
        '      names, so you can transfer the fieldnames by traversing the
        '      fields collection.
        Dim n As Int32
        For n = 1 To rs.Fields.Count
            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
        Next

        'Transfer the data to Excel.
        oSheet.Range("A2").CopyFromRecordset(rs)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book3.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()

        'Close the connection
        rs.Close()
        conn.Close()
				
Hinweis:Die Methode CopyFromRecordset funktioniert nur mit ADO-Recordset-Objekten. Mit ADO.NET erstellte DataSets können nicht in Verbindung mit der Methode CopyFromRecordset verwendet werden. Die diversen Beispiele in den folgenden Abschnitten demonstrieren das Übertragen von Daten auf Excel mithilfe von ADO.NET.

Verwendung der Automatisierung zum Erstellen eines Abfragetabellenobjekts auf einem Arbeitsblatt

Ein Objekt des Typs Abfragetabelle (QueryTable) repräsentiert eine Tabelle, die mit Daten aus einer externen Datenquelle erstellt wurde. Im Rahmen der Automatisierung von Excel können Sie eine Abfragetabelle erstellen, indem Sie eine Verbindungszeichenfolge für eine Verbindung zu einer OLEDB- oder ODBC-Datenquelle und eine SQL-Zeichenfolge eingeben.Excel generiert das Recordset, und fügt es dann an der von Ihnen festgelegten Stelle in das Arbeitsblatt ein. Die Verwendung von Objekten des Typs Abfragetabelle bietet die folgenden Vorteile gegenüber der Methode CopyFromRecordset:
  • Excel übernimmt die Erstellung des Recordsets und dessen Platzierung auf dem Arbeitsblatt.
  • Die Abfrage kann zusammen mit dem Abfragetabellen-Objekt gespeichert werden, um eine spätere Aktualisierung mit einem neuen Recordset zu ermöglichen.
  • Wenn Ihrem Arbeitsblatt eine neue Abfragetabelle hinzugefügt wird, können Sie festlegen, dass in den Zellen des Arbeitsblattes vorhandene Daten verschoben werden, um Platz für die neuen Daten zu schaffen (für weitere Details siehe die Eigenschaft RefreshStyle (Formatvorlage aktualisieren)).
Der folgende Code veranschaulicht, wie Sie Excel 2000 oder 2002 so automatisieren können, dass unter Verwendung von Daten aus der Beispieldatenbank "Nordwind" ein neues Objekt des Typs Abfragetabelle in einem Excel-Arbeitsblatt erstellt wird:
        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Create the QueryTable object.
        Dim oQryTable As Object
        oQryTable = oSheet.QueryTables.Add( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";", oSheet.Range("A1"), _
            "Select * from Orders")
        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
        oQryTable.Refresh(False)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book4.xls")
        oQryTable = Nothing
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
				

Verwendung der Zwischenablage

Sie können die Windows-Zwischenablage verwenden, um Daten auf ein Arbeitsblatt zu übertragen. Sie können eine Zeichenfolge mit durch Tabulatoren getrennten Spalten und durch Zeilenschaltungen getrennten Zeilen kopieren und dann in mehrere Zellen auf einem Arbeitsblatt einfügen. Der folgende Code illustriert, wie Visual Basic .NET die Windows-Zwischenablage nutzt, um Daten nach Excel zu übertragen:
        'Copy a string to the Clipboard.
        Dim sData As String
        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
        System.Windows.Forms.Clipboard.SetDataObject(sData)

        'Create a workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Paste the data.
        oBook.Worksheets(1).Range("A1").Select()
        oBook.Worksheets(1).Paste()

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book5.xls")
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Erstellen einer Textdatei mit Trennzeichen, die Excel in Zeilen und Spalten auflösen kann

Excel kann durch Tabulatoren oder Trennzeichen getrennte Dateien öffnen und die darin enthaltenen Daten korrekt in Zellen einfügen. Sie können dieses Feature verwenden, wenn Sie eine große Datenmenge bei nur wenig oder gar keiner Automatisierung auf ein Arbeitsblatt übertragen möchten.Diese Vorgehensweise ist insbesondere für Client-/Serverprogramme geeignet, weil die Textdatei auf der Serverseite generiert werden kann.Sie können die erstellte Datei dann auf dem Client öffnen und die Automatisierung je nach Bedarf nutzen.

Der folgende Code veranschaulicht das Erstellen einer durch Tabulatoren getrennten Textdatei, die mit ADO.NET gelesen wird:
        'Connect to the data source.
        Dim objConn As New System.Data.OleDb.OleDbConnection( _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
        objConn.Open()

        'Execute a command to retrieve all records from the Employees table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand( _
            "Select * From Employees", objConn)
        Dim objReader As System.Data.OleDb.OleDbDataReader
        objReader = objCmd.ExecuteReader()

        'Read the records in the dataset and write select fields to the 
        'output file.
        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
        Dim i As Integer, s As String
        While objReader.Read()
            'Loop through first 6 fields and concatenate
            'each field, separated by a tab, into s variable.
            s = ""
            For i = 0 To 5
                If Not objReader.IsDBNull(i) Then
                    If i = 0 Then 'field 1 is EmployeeId
                        s = s & objReader.GetInt32(i).ToString
                    ElseIf i = 5 Then 'field 6 is BirthDate
                        s = s & objReader.GetDateTime(i)
                    Else 'field is a text field
                        s = s & objReader.GetString(i)
                    End If
                End If
                s = s & Microsoft.VisualBasic.ControlChars.Tab
            Next
            PrintLine(1, s)
        End While
        FileClose(1)

        'Close the reader and the connection.
        objReader.Close()
        objConn.Close()
				
Bei dem vorstehenden Code wurde keine Automatisierung verwendet.Sie können jedoch einen geringen Grad der Automatisierung einsetzen, um die Textdatei zu öffnen und im Format einer Excel-Arbeitsmappe zu speichern. Gehen Sie hierzu folgendermaßen vor:
        'Create a new instance of Excel.
        Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")

        'Open the text file and save it in the Excel workbook format.
        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
            , , , -4142, , True) 'xlTextQualifierNone=-4142

        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
            -4143) 'xlWorkbookNormal = -4143

        'Quit Excel.
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Übertragen von Daten auf ein Arbeitsblatt mithilfe von ADO.NET

Sie können den Microsoft Jet OLE DB-Provider verwenden, um einer Tabelle in einer bereits vorhandenen Excel-Arbeitsmappe Datensätze hinzuzufügen. Eine "Tabelle" in Excel ist eigentlich nur ein Bereich mit Zellen, wobei der Bereich einen definierten Namen haben kann. Typischerweise enthält die erste Zeile des Bereichs die Kopfzeilen (oder Feldnamen), während alle folgenden Zeilen die eigentlichen Datensätze enthalten.

Der folgenden Code fügt einer Tabelle in "Book7.xls" zwei neue Datensätze hinzu. Die Tabelle in diesem Beispiel hat den Namen "Sheet1":
       'Establish a connection to the data source.
        Dim sConnectionString As String
        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & sSampleFolder & _
            "Book7.xls;Extended Properties=Excel 8.0;"
        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
        objConn.Open()

        'Add two records to the table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand()
        objCmd.Connection = objConn
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Bill', 'Brown')"
        objCmd.ExecuteNonQuery()
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Joe', 'Thomas')"
        objCmd.ExecuteNonQuery()

        'Close the connection.
        objConn.Close()
				
Wenn Sie wie hier dargestellt Datensätze mit ADO.NET hinzufügen, wird die Formatierung in der Arbeitsmappe beibehalten. Jeder Datensatz, der einer Zeile hinzugefügt wird, übernimmt die Formatierung der vorherigen Zeile.So werden beispielsweise neue Felder, die der Spalte B hinzugefügt werden, rechtsbündig formatiert, weil die Zelle B1 rechtsbündig formatiert ist.

Beachten Sie, dass ein Datensatz, wenn er einer Zelle oder mehreren Zellen hinzugefügt wird, alle Daten überschreibt, die zuvor in diesen Zellen enthalten waren.Zeilen in dem Arbeitsblatt werden also nicht "nach unten verschoben", wenn man neue Datensätze hinzufügt. Denken Sie daran, wenn Sie das Layout Ihrer Daten auf Ihren Arbeitsblättern entwerfen und planen, neue Datensätze mithilfe von ADO.NET einzufügen.

Weitere Informationen zur Verwendung von ADO.NET finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
301075 SO WIRD'S GEMACHT: Herstellen einer Verbindung zu einer Datenbank und Ausführen eines Befehls mit ADO.NET und Visual Basic .NET
301216 SO WIRD'S GEMACHT: Auffüllen eines DataSet-Objekts aus einer Datenbank mit Visual Basic .NET.
301248 HSO WIRD'S GEMACHT: Aktualisieren einer Datenbank aus einem DataSet-Objekt mit Visual Basic .NET.
Weitere Informationen zur Verwendung des Jet OLE DB-Providers in Verbindung mit Excel-Datenquellen finden Sie in dem folgenden Artikel der Microsoft Knowledge Base:
278973 BEISPIEL: ExcelADO zeigt, wie ADO zum Lesen und Schreiben von Daten in Excel-Arbeitsmappen verwendet wird
257819 SO WIRD'S GEMACHT: Verwenden von ADO mit Excel-Daten von Visual Basic oder VBA

Übertragen von XML-Daten (nur Excel 2002)

Excel 2002 kann jede XML-Datei öffnen, sofern sie "wohl geformt" ist. XML-Dateien können direkt mithilfe des Befehls Öffnen im Menü Datei oder programmatisch mithilfe der Methoden Open oder OpenXML der Sammlung Workbooks (Arbeitsmappen) geöffnet werden.Wenn Sie XML-Dateien für die Verwendung in Excel erstellen, können Sie zusätzlich Formatvorlagen zum Formatieren der Daten erstellen.

Weitere Informationen zur Verwendung von XML in Verbindung mit Excel 2002 finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
307021 SO WIRD´S GEMACHT: Übertragen von XML-Daten auf Microsoft Excel 2002 mit Visual Basic .NET
288215 MINFO: Microsoft Excel 2002 und XML

Erstellen des vollständigen Visual Basic .NET-Beispielprojekts

  1. Erstellen Sie einen neuen Ordner, in dem die Excel-Arbeitsmappen gespeichert werden, die das Codebeispiel für Sie erstellen wird, und geben Sie diesem Ordner den Namen "C:\Exceldata\".
  2. Gehen Sie folgendermaßen vor, um eine neue Arbeitsmappe zu erstellen, in die das Codebeispiel schreiben soll:
    1. Erstellen Sie eine neue Arbeitsmappe in Excel.
    2. In Tabelle1 der neuen Arbeitsmappe geben Sie FirstName (Vorname) in Zelle A1 und LastName (Nachname) in Zelle A2 ein.
    3. Speichern Sie die Arbeitsmappe unter dem Namen "C:\Exceldata\Book7.xls".
  3. Starten Sie Visual Studio .NET.Klicken Sie im Menü Datei auf Neu, und klicken Sie anschließend auf Projekt.Unter Visual Basic-Projekte wählen Sie die Option Windows-Anwendung.Standardmäßig wird jetzt Form1 erstellt.
  4. Fügen Sie einen Verweis auf die Excel-Objektbibliothek hinzu.Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Menü Projekt auf Verweis hinzufügen.
    2. Gehen Sie zu dem Eintrag für die Microsoft Excel 10.0 Object Library auf der Registerkarte COM, und klicken Sie dann auf Auswählen.

      Hinweis: Sofern Sie dies nicht bereits getan haben, empfiehlt Microsoft das Downloaden und Installieren der "Primären Interop-Assemblys" für Microsoft Office XP (Primary Interop Assemblies = PIAs). Weitere Informationen zu Office XP-PIAs finden Sie im folgenden Artikel der Microsoft Knowledge Base:
      328912 Primäre Interop-Assemblys (PIAs) für Microsoft Office XP stehen zum Download zur Verfügung
    3. Gehen Sie auf der Registerkarte COM zu dem Eintrag für die Microsoft ActiveX Data Objects 2.7-Bibliothek, und klicken Sie dann auf Auswählen.
    4. Klicken Sie im Dialogfeld Verweise hinzufügen auf OK, um Ihre Auswahl zu bestätigen.Klicken Sie auf Ja, wenn Sie gefragt werden, ob für die von Ihnen gewählten Bibliotheken-Wrapper erstellt werden sollen.
  5. Fügen Sie Form1 ein Kombinationsfeld-Steuerelement (Combo Box) und ein Schaltflächen-Steuerelement (Button) hinzu.
  6. Fügen Sie Form1 den folgenden Code hinzu:
         Const sSampleFolder = "C:\ExcelData\"     Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _       Handles MyBase.Load         ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList         Dim aList As String() = _             {"Use Automation to Transfer Data Cell by Cell ", _              "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _              "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _              "Use Automation to Create a QueryTable on a Worksheet", _              "Use the Clipboard", _              "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _              "Transfer Data to a Worksheet Using ADO.NET "}         ComboBox1.Items.AddRange(aList)         ComboBox1.SelectedIndex = 0         Button1.Text = "Go!"     End Sub      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _       Handles Button1.Click         Select Case ComboBox1.SelectedIndex             Case 0 : Automation_CellByCell()             Case 1 : Automation_UseArray()             Case 2 : Automation_ADORecordset()             Case 3 : Automation_QueryTable()             Case 4 : Use_Clipboard()             Case 5 : Create_TextFile()             Case 6 : Use_ADONET()         End Select         GC.Collect()     End Sub      Private Function Automation_CellByCell()         Dim oExcel As Object         Dim oBook As Object         Dim oSheet As Object          'Start a new workbook in Excel.         oExcel = CreateObject("Excel.Application")         oBook = oExcel.Workbooks.Add          'Add data to cells of the first worksheet in the new workbook.         oSheet = oBook.Worksheets(1)         oSheet.Range("A1").Value = "Last Name"         oSheet.Range("B1").Value = "First Name"         oSheet.Range("A1:B1").Font.Bold = True         oSheet.Range("A2").Value = "Doe"         oSheet.Range("B2").Value = "John"          'Save the workbook and quit Excel.         oBook.SaveAs(sSampleFolder & "Book1.xls")         oSheet = Nothing         oBook = Nothing         oExcel.Quit()         oExcel = Nothing         GC.Collect()     End Function      Private Function Automation_UseArray()         Dim oExcel As Object         Dim oBook As Object         Dim oSheet As Object          'Start a new workbook in Excel.         oExcel = CreateObject("Excel.Application")         oBook = oExcel.Workbooks.Add          'Create an array with 3 columns and 100 rows.         Dim DataArray(99, 2) As Object         Dim r As Integer         For r = 0 To 99             DataArray(r, 0) = "ORD" & Format(r + 1, "0000")             DataArray(r, 1) = Rnd() * 1000             DataArray(r, 2) = DataArray(r, 1) * 0.07         Next          'Add headers to the worksheet on row 1.         oSheet = oBook.Worksheets(1)         oSheet.Range("A1").Value = "Order ID"         oSheet.Range("B1").Value = "Amount"         oSheet.Range("C1").Value = "Tax"          'Transfer the array to the worksheet starting at cell A2.         oSheet.Range("A2").Resize(100, 3).Value = DataArray          'Save the workbook and quit Excel.         oBook.SaveAs(sSampleFolder & "Book2.xls")         oSheet = Nothing         oBook = Nothing         oExcel.Quit()         oExcel = Nothing         GC.Collect()     End Function      Private Function Automation_ADORecordset()         'Create a Recordset from all the records in the Orders table.         Dim sNWind As String         Dim conn As New ADODB.Connection()         Dim rs As ADODB.Recordset         conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _             sNorthwind & ";")         conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient         rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)          'Create a new workbook in Excel.         Dim oExcel As Object         Dim oBook As Object         Dim oSheet As Object         oExcel = CreateObject("Excel.Application")         oBook = oExcel.Workbooks.Add         oSheet = oBook.Worksheets(1)          'Transfer the field names to Row 1 of the worksheet:         'Note: CopyFromRecordset copies only the data and not the field         '      names, so you can transfer the fieldnames by traversing the         '      fields collection.         Dim n As Int32         For n = 1 To rs.Fields.Count             oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name         Next          'Transfer the data to Excel.         oSheet.Range("A2").CopyFromRecordset(rs)          'Save the workbook and quit Excel.         oBook.SaveAs(sSampleFolder & "Book3.xls")         oSheet = Nothing         oBook = Nothing         oExcel.Quit()         oExcel = Nothing         GC.Collect()          'Close the connection.         rs.Close()         conn.Close()     End Function      Private Function Automation_QueryTable()         'Create a new workbook in Excel.         Dim oExcel As Object         Dim oBook As Object         Dim oSheet As Object         oExcel = CreateObject("Excel.Application")         oBook = oExcel.Workbooks.Add         oSheet = oBook.Worksheets(1)          'Create the QueryTable object.         Dim oQryTable As Object         oQryTable = oSheet.QueryTables.Add( _         "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _             sNorthwind & ";", oSheet.Range("A1"), _             "Select * from Orders")         oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2         oQryTable.Refresh(False)          'Save the workbook and quit Excel.         oBook.SaveAs(sSampleFolder & "Book4.xls")         oQryTable = Nothing         oSheet = Nothing         oBook = Nothing         oExcel.Quit()           oExcel = Nothing      End Function      Private Function Use_Clipboard()         'Copy a string to the clipboard.         Dim sData As String         sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _             & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _             & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"         System.Windows.Forms.Clipboard.SetDataObject(sData)          'Create a new workbook in Excel.         Dim oExcel As Object         Dim oBook As Object         oExcel = CreateObject("Excel.Application")         oBook = oExcel.Workbooks.Add          'Paste the data.         oBook.Worksheets(1).Range("A1").Select()         oBook.Worksheets(1).Paste()          'Save the workbook and quit Excel.         oBook.SaveAs(sSampleFolder & "Book5.xls")         oBook = Nothing         oExcel.Quit()         oExcel = Nothing         GC.Collect()     End Function      Private Function Create_TextFile()         'Connect to the data source.         Dim objConn As New System.Data.OleDb.OleDbConnection( _             "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")         objConn.Open()          'Run a command to retrieve all records from the Employees table.         Dim objCmd As New System.Data.OleDb.OleDbCommand( _             "Select * From Employees", objConn)         Dim objReader As System.Data.OleDb.OleDbDataReader         objReader = objCmd.ExecuteReader()          'Read the records in the dataset and write select fields to the          'output file.         FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)         Dim i As Integer, s As String         While objReader.Read()             'Loop through first 6 fields and concatenate             'each field, separated by a tab, into s variable.             s = ""             For i = 0 To 5                 If Not objReader.IsDBNull(i) Then                     If i = 0 Then 'field 1 is EmployeeId                         s = s & objReader.GetInt32(i).ToString                     ElseIf i = 5 Then 'field 6 is BirthDate                         s = s & objReader.GetDateTime(i)                     Else 'field is a text field                         s = s & objReader.GetString(i)                     End If                 End If                 s = s & Microsoft.VisualBasic.ControlChars.Tab             Next             PrintLine(1, s)         End While         FileClose(1)          'Close the reader and the connection.         objReader.Close()         objConn.Close()          'Create a new instance of Excel.         Dim oExcel As Object         oExcel = CreateObject("Excel.Application")          'Open the text file and save it in the Excel workbook format.         oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _             , , , -4142, , True) 'xlTextQualifierNone=-4142          oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _             -4143) 'xlWorkbookNormal = -4143          'Quit Excel.         oExcel.Quit()         oExcel = Nothing         GC.Collect()     End Function      Private Function Use_ADONET()          'Verify that the workbook to write to does exist.         Dim sFile As String = sSampleFolder & "Book7.xls"         If Dir(sFile) = "" Then             MsgBox("Please create the workbook Book7.xls and try again.")             Exit Function         End If          'Establish a connection to the data source.         Dim sConnectionString As String         sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _             "Data Source=" & sSampleFolder & _             "Book7.xls;Extended Properties=Excel 8.0;"         Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)         objConn.Open()          'Add two records to the table named 'MyTable'.         Dim objCmd As New System.Data.OleDb.OleDbCommand()         objCmd.Connection = objConn         objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _             " values ('Bill', 'Brown')"         objCmd.ExecuteNonQuery()         objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _             " values ('Joe', 'Thomas')"         objCmd.ExecuteNonQuery()          'Close the connection.         objConn.Close()     End Function 					
    Hinweis: Falls Sie Office nicht im Standardordner (C:\Programme\Microsoft Office) installiert haben, müssen Sie die Konstante sNorthwind in dem Codebeispiel so ändern, dass sie Ihrem Installationspfad für die Beispieldatenbank "Nordwind.mdb" entspricht.

  7. Fügen Sie ganz oben in "Form1.vb" den folgenden Code ein:
    Imports Microsoft.Office.Interop
    					
  8. Drücken Sie die Taste [F5], um das Codebeispiel erstellen und dann ausführen zu lassen.

Informationsquellen

Weitere Informationen finden Sie auf folgender MSDN-Website:
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
247412 INFO: Methoden zum Übertragen von Daten von Visual Basic zu Excel

Eigenschaften

Artikel-ID: 306022 - Geändert am: Mittwoch, 17. Januar 2007 - Version: 6.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
Keywords: 
kbhowtomaster kbautomation KB306022
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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