Daten schnell in Excel schreiben

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Cell.

    Daten schnell in Excel schreiben

    Hallo,

    habe folgendes Problem.

    Ich mache eine SQL Abfrage aus vb.net heraus und lasse mir die ergebnisse in einem datagridview anzeigen.
    Danach soll das Datagridview nach Excel exportiert werden. Dies funktioniert, dauert aber bei ca. 200.000 Datensätzen sehr lange.

    Mein nächster Versuch, die Daten gleich in ein Excelblatt mit folgenden Code:

    VB.NET-Quellcode

    1. Dim oExcel As Object
    2. Dim oBook As Object
    3. Dim oSheet As Object
    4. Dim excelZaehler As Double
    5. excelZaehler = 1
    6. oExcel = CreateObject("Excel.Application")
    7. oBook = oExcel.Workbooks.Add
    8. oSheet = oBook.Worksheets(1)
    9. reader = cmd.ExecuteReader()
    10. Do While reader.Read()
    11. oSheet.cells(excelZaehler, 1) = kunde
    12. oSheet.cells(excelZaehler, 2) = strasse
    13. oSheet.cells(excelZaehler, 3) = ort
    14. .
    15. .
    16. .
    17. oSheet.cells(excelZaehler, 45) = umsatz
    18. Loop


    funktioniert auch, dauert aber bei 200.000 Datensätzen auch ziemlich lange(15min.)


    Kann mir jemand einen Tip geben, wie ich meine Abfrageergebnisse am schnellsten in ein Excelblatt bekomme?


    Vielen Dank
    der von dir gezeigte Code tut das von dir beschriebene ganz bestimmt nicht.
    Kannst du nicht eine ordentliche Methode posten?

    Prinzipiell sehe ich 2 Möglichkeiten:
    1. mit einem geeigneten Connectionstring kann man ein vorhandenes Excel-Workbook wie eine Datenbank ansprechen, und mit einem OleDb-Command abfragen oder auch befüllen.
      Ob das sehr schnell ist weißichnich - es ist v.a. bisserl unsicher, es kommt schnell zu Fehlinterpretationen von Datentypen
    2. es gibt glaub sogar mehrere freie Bibliotheken, mit denen man Excel-Dateien manipulieren kann - google mal bisserl.
      Von denen denke ich, dass die sehr gut gecodet sind, also schnell + korrekt arbeiten, und auch keine unsichtbaren Prozesse im Speicher hinterlassen, wie's einem bei Excel-InterOp so überaus leicht unterläuft.

    tobisch159 schrieb:

    bei 200.000 Datensätzen auch ziemlich lange
    Du trägst die Zellen einzeln ein und das muss Excel jedesmal anzeigen.

    1) Schreibe die Daten zunächst in ein Array und trage das Array auf einmal ein.
    2) Setze oExcel.ScreenUpdating = False.

    Diese Maßnahmen bringen mindestens Faktor 100 an Geschwindigkeit.

    Oder verwende einen Vorschlag aus dem Vor-Post, die arbeiten gleich ohne GUI.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --