xls in DataGridView

  • VB.NET

Es gibt 116 Antworten in diesem Thema. Der letzte Beitrag () ist von guccini.

    xls in DataGridView

    hallo zusammen, versuche gerade alle xls dateien die sich im "C:\Temp\" befinden in DGV aufzuflisten, es soll für alle xls-dateien die zelle A10 und F5 in DGV angezeigt werden, mit eine datei klappt , wie klappt das mit mehrere?
    habe so probiert:

    VB.NET-Quellcode

    1. Imports Excel = Microsoft.Office.Interop.Excel
    2. Imports Office = Microsoft.Office.Core
    3. Imports System.Data.SqlClient
    4. Imports System.Data.OleDb
    5. Imports System.IO
    6. Public Class Form1
    7. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    8. Dim folder = "C:\Temp\"
    9. Dim CnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & folder & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    10. Dim dt As New DataSet
    11. Dim bs As New BindingSource
    12. bs.DataSource = dt
    13. Using Adp As New OleDb.OleDbDataAdapter("SELECT * FROM [Tabelle1$F5:F5],[Tabelle1$A10:A10]", CnStr)
    14. Adp.Fill(dt)
    15. DataGridView1.DataSource = dt.Tables(0).DefaultView
    16. DataGridView1.Columns.Item(0).HeaderCell.Value = "Zeichnungsnummer"
    17. DataGridView1.Columns.Item(0).Width = 125
    18. DataGridView1.Columns.Item(1).HeaderCell.Value = "Artikelbeschreibung"
    19. DataGridView1.Columns.Item(1).Width = 300
    20. End Using
    21. End Sub
    22. End Class


    mit diese fehlermeldung:
    Du versuchst gerade einen Ordner als Excel-Tabelle zu benutzen.

    Versuche stattdessen einmal von Zeile 12 - 24 in eine Schleife zu packen, mit der du alle Dateien in folder durchläufst.
    Als Datasource in CnStr gibst du dann deine Datei der Schleife an. (Eine Prüfung auf eine Excel-Datei wäre vielleicht sinnvoll. Nur um Fehler zu vermeiden.)

    z.B. so

    VB.NET-Quellcode

    1. For Each file As String In Directory.GetFiles(folder)
    2. If Path.GetExtension(file) = ".xlsx" Then
    3. Debug.Print(file)
    4. End If
    5. Next
    Probier das mal. Damit hast du die direkte Excel-Schnittstelle. Du musst aber noch folgendes importieren.

    VB.NET-Quellcode

    1. Microsoft.Office.Interop


    VB.NET-Quellcode

    1. Dim folder As String = "C:\Daten\_Dokumente\"
    2. Dim ds As New DataSet
    3. ds.Tables.Add("Excel")
    4. ds.Tables("Excel").Columns.Add("Zeichnungsnummer")
    5. ds.Tables("Excel").Columns.Add("Artikelbeschreibung")
    6. Dim excelApp As New Excel.Application
    7. Dim workbook As Excel.Workbook
    8. Dim workbooks As Excel.Workbooks = excelApp.Workbooks
    9. Dim tabelle As Excel.Worksheet
    10. For Each file As String In Directory.GetFiles(folder)
    11. If Path.GetExtension(file) = ".xlsx" Then
    12. workbook = workbooks.Open(file)
    13. tabelle = CType(workbook.Worksheets(1), Excel.Worksheet)
    14. ds.Tables("Excel").Rows.Add({tabelle.Range("F5").Value, tabelle.Range("A10").Value})
    15. workbook.Close()
    16. End If
    17. Next
    18. excelApp.Quit()
    19. DataGridView1.DataSource = ds.Tables("Excel")
    habe mal so probiert klappt nicht

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    2. Dim i As Integer = DataGridView1.CurrentRow.Index
    3. With DataGridView1
    4. WebBrowser1 = DataGridView1.Item(0, i).Value
    5. End With
    6. End Sub
    so zeigt mir fehlermeldung an:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    2. Dim i As Integer = DataGridView1.CurrentRow.Index
    3. With DataGridView1
    4. WebBrowser1.Url = DataGridView1.Item(0, i).Value
    5. End With
    6. End Sub

    kann ich dir ganz genau erzählen: nach 87formen mit unterschidlichen zusammensetzungen hab ich aufgegeben da sich nur noch müll ergeben hat, dadurch hab ich den gesamten überblick verloren und den ganzen mist gelöscht, stehe dort wo ich angefangen hab.

    VB.NET-Quellcode

    1. Private Sub Form17_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim folder As String = "C:\Temp\"
    3. Dim ds As New DataSet
    4. ds.Tables.Add("Excel")
    5. ds.Tables("Excel").Columns.Add("Zeichnungsnummer")
    6. ds.Tables("Excel").Columns.Add("Artikelbeschreibung")
    7. Dim excelApp As New Excel.Application
    8. Dim workbook As Excel.Workbook
    9. Dim workbooks As Excel.Workbooks = excelApp.Workbooks
    10. Dim tabelle As Excel.Worksheet
    11. For Each file As String In Directory.GetFiles(folder)
    12. If Path.GetExtension(file) = ".xls" Then
    13. workbook = workbooks.Open(file)
    14. tabelle = CType(workbook.Worksheets(1), Excel.Worksheet)
    15. ds.Tables("Excel").Rows.Add({tabelle.Range("F5").Value, tabelle.Range("A10").Value})
    16. workbook.Close()
    17. End If
    18. Next
    19. excelApp.Quit()
    20. DataGridView1.DataSource = ds.Tables("Excel")
    21. DataGridView1.Columns.Item(0).Width = 125
    22. DataGridView1.Columns.Item(1).Width = 600
    23. End Sub
    24. Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    25. Dim i As Integer = DataGridView1.CurrentRow.Index
    26. With DataGridView1
    27. WebBrowser1.Url = (New Uri(DataGridView1.Item(0, i).Value))
    28. End With
    29. End Sub
    Ich weiß es: da steht eine Zeichnungnummer.
    Die nützt ihm aber nix, denn eine Nummer kann man nicht mit Excel öffnen :P
    ----------------------------------------------------------------------------------
    @TE: Tja - irgendwann wirst du wohl mit relationaler Datenmodellierung anfangen müssen.

    Es gibt bei dir
    ExcelFiles
    ExcelTables
    Drawings

    1 File enthält viele Tables, eine Table viele Drawings
    Das ist eine Kette von 1:n Relationen.
    zu Relation gugge die relationale GrundIdee

    Nun bau dir ein passendes tyisiertes Dateset für dein Modell, nämlich mit den Tabellen XlsFile, XlsTable, Drawing, und den zugehörigen Relationen:
    XlsFile -> XlsTable -> Drawing
    wie das geht gugge vier Views-Videos

    Mit diesem Datenmodell kannst du deinen XlsFileRow - Datensätzen auch den Fullname der Datei zufügen, und die mit Excel zu öffnen ist kein Thema.