DataGridView und Excel :)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Narretei.

    DataGridView und Excel :)

    Hallo :) ich bin's wieder :)

    Ich habe Probleme dabei, eine Excel-Datei mit mehreren Spalten und Zeilen in eine DataGridView zuschreiben. Bei dem Einleseversuch erhalte ich
    folgende Fehlermeldung:

    System.Runtime.InteropServices.COMException: "Ausnahme von HRESULT: 0x800A03EC"

    Ich versuche das gamze mit Hilfe von FOR-Schleifen umzusetzen, bin aber grad mit dieser Fehlermeldung etwas ratlos :S
    Hier mein Quellcode:

    VB.NET-Quellcode

    1. For i As Integer = 0 To xlRead.Rows.Count - 2
    2. For j As Integer = 0 To xlRead.Columns.Count - 1
    3. dgv.Rows(i).Cells(j) = xlRead.Cells(i, j)
    4. Next
    5. Next


    xlRead ist die Excel-Application mit Mehreren Spalten und Zahlen die ich vorher im Programm erstellt habe.

    Kennt sich jemand hiermit aus? :)

    LizardProgrammer schrieb:

    xlRead ist die Excel-Application
    For i As Integer = 0 To xlRead.Rows.Count - 2
    For j As Integer = 0 To xlRead.Columns.Count - 1

    Unabhängig ob das funktioniert oder nicht: Du solltest mit dem Worksheet-Objekt arbeiten und nicht mit dem Application-Objekt.

    Aber egal. xlRead.Rows.Count ist bei den derzeitigen Excel-Anwendungen konstant 1 048 576 und xlRead.Columns.Count ist 16 384
    Das sind 17 179 869 184 (17 Milliarden) Schleifendurchläufe.
    Wundere dich nicht, wenn das entweder sehr lange dauert oder halt schief geht.
    Abgesehen davon, willst du bestimmt nicht ein DGV dieser Größe.

    Ich würde das Ende der Tabelle ermitteln oder wenigstens Worksheet.UsedRange verwenden.

    Und daraus würde ich mir eine Datatable machen, die ich dem DatagridView als DataSource zuweise.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo @petaod,

    das mit den Schleifenvariablen hab ich mittlerweile festgestellt und schon geändert gehabt.
    Mein Fehler den ich jetzt habe, kann damit also nichts zu tun haben.

    Ich habe mit einem einfchen Befehl, einer Zelle meiner DataGridView einen String zugewiesen. Und das hat funktioniert :)

    Kannst du mir ein Beispiel nennen, wie ich aus der Excel-Tabelle eine DataTable mache? Ich kann mir das grad nicht genau vorstellen...
    Und liegt der Fehler meines Programms daran, dass ich irgendwo einen Denkfehler drin habe oder kann man einfach nicht direkt von einer Excel-Tabelle in eine
    DataGridView schreiben?

    Grüße
    Let me Google that for you!
    (Soll übrigens kein gemobbe sein, ich weiß man weiß am Anfang nich was man suchen muss)
    google.de/search?q=excel+sheet+to+datatable&ie=&oe=

    Erstes Ergebnis:
    stackoverflow.com/questions/14…el-sheet-into-a-datatable

    ​Akzeptierte Lösung (von mir ungetestet):

    VB.NET-Quellcode

    1. Dim sSheetName As String
    2. Dim sConnection As String
    3. Dim dtTablesList As DataTable
    4. Dim oleExcelCommand As OleDbCommand
    5. Dim oleExcelReader As OleDbDataReader
    6. Dim oleExcelConnection As OleDbConnection
    7. sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test.xls;Extended Properties=""Excel 12.0;HDR=No;IMEX=1"""
    8. oleExcelConnection = New OleDbConnection(sConnection)
    9. oleExcelConnection.Open()
    10. dtTablesList = oleExcelConnection.GetSchema("Tables")
    11. If dtTablesList.Rows.Count > 0 Then
    12. sSheetName = dtTablesList.Rows(0)("TABLE_NAME").ToString
    13. End If
    14. dtTablesList.Clear()
    15. dtTablesList.Dispose()
    16. If sSheetName <> "" Then
    17. oleExcelCommand = oleExcelConnection.CreateCommand()
    18. oleExcelCommand.CommandText = "Select * From [" & sSheetName & "]"
    19. oleExcelCommand.CommandType = CommandType.Text
    20. oleExcelReader = oleExcelCommand.ExecuteReader
    21. nOutputRow = 0
    22. While oleExcelReader.Read
    23. End While
    24. oleExcelReader.Close()
    25. End If
    26. oleExcelConnection.Close()