Per Visual Basic (mit Visual Studio2017) eine Excel Datei öffnen und bearbeiten

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Per Visual Basic (mit Visual Studio2017) eine Excel Datei öffnen und bearbeiten

    Hallo zusammen,

    ich bin hier neu und habe auch noch nicht viel mit Visual Basic im Visual Studio programmiert.
    Nun zu meiner Frage:
    Brauche ich um über Visual Basic eine .xlsx Datei (Excel Datei) zu öffnen und zu bearbeiten eigentlich Excel?
    Ich meine muss Excel installiert sein auf meinem PC? Ich weiß man kann per VB eine Excel Datei öffnen und auch auf bestimmte Zellen zugreifen.


    Mit freundlichen Grüssen
    Ingo :)
    Willkommen im Forum.
    Ja, geht, siehe thematisch gleicher Thread auf stackoverflow.
    Ohne alles geht es bestimmt auch. Aber dazu müsstest Du wohl (AFAIU) eine Excel-Datei decodieren können.
    Ggf. reichen aber auch schon die Interop-Dateien?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Ingo2 Auch von mir ein Willkommen im Forum. :thumbup:
    Probiere mal folgenden Code aus (getestet):
    dotnet-snippets.de/snippet/exc…ledb-in-dataset-lesen/637
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim path = "C:\Temp\TestTable.xls" ' Deine Tabelle
    3. Dim DtSet = GetExcelDataSet(path, True)
    4. Me.DataGridView1.DataSource = DtSet.Tables(0) ' die erste Tabelle
    5. End Sub
    6. ''' <summary>
    7. ''' Holt die Daten aus einer Excel-Datei in ein DataSet
    8. ''' </summary>
    9. ''' <param name="excelFile">Pfad zur Excel-Datei</param>
    10. ''' <param name="headers">Haben die Tabellenspalten Überschriften</param>
    11. ''' <returns>DataSet</returns>
    12. Private Function GetExcelDataSet(ByVal excelFile As String, ByVal headers As Boolean) As DataSet
    13. Dim ds As DataSet = New DataSet()
    14. Dim con As OleDbConnection = New OleDbConnection()
    15. con.ConnectionString = "Data Source=" & excelFile & ";Provider=Microsoft.Jet.OLEDB.4.0;"
    16. If headers Then
    17. con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=Yes"""
    18. Else
    19. con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=No"""
    20. End If
    21. con.Open()
    22. Dim sheets As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    23. For Each sheet As DataRow In sheets.Rows
    24. Dim tableName As String = sheet("Table_Name").ToString()
    25. Dim sql As String = "SELECT * FROM [" & tableName & "]"
    26. Dim adap As OleDbDataAdapter = New OleDbDataAdapter(sql, con)
    27. adap.Fill(ds, tableName)
    28. Next
    29. con.Close()
    30. Return ds
    31. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für Eure Antworten:
    Ich habe die Interop-Datei Microsoft.Office.Interop.Excel eingebunden.
    Sonst noch keine.
    Welche brauche ich noch?
    Ich bekomme nämlich folgende Fehlermeldung:
    Die AktiveX-Komponente kann nicht erstellt werden.
    Meine Codezeile lautet so:

    VB.NET-Quellcode

    1. Dim Exceldatei As Object = CreateObject("Excel.Application")


    Gruss
    Ingo :)

    Ingo2 schrieb:

    Ich habe die Interop-Datei Microsoft.Office.Interop.Excel eingebunden.
    Wie genau hast Du das gemacht?
    Eine Interop-Datei Deinem Projekt hinzugefügt
    oder
    das OCX Deinem Projekt hinzugefügt?
    Mein Snippet geht ohne dies.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Ingo2 schrieb:

    Microsoft.Office.Interop.Excel
    Sobald du damit arbeitest, benötigst du auf dem Zielrechner ein installiertes Excel, was du ja nicht willst.
    Die oben beschriebenen Ansätze (OldDb, EPPlus) sind dafür gedacht, genau dies zu umgehen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --