Nach öffnen von Excel Datei nur das anzeigen, was ich will

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Nach öffnen von Excel Datei nur das anzeigen, was ich will

    Ich habe eine Excel Datei in VB.NET geöffnet und die wird auch im Gridview schön angezeigt.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports ExcelDataReader
    3. Public Class Form1
    4. Dim tables As DataTableCollection
    5. Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
    6. Using ofd As OpenFileDialog = New OpenFileDialog() With {.Filter = "Excel Workbook|*.xlsx|Excel 97-2003 Workbook|*.xls"}
    7. If ofd.ShowDialog() = DialogResult.OK Then
    8. txtFileName.Text = ofd.FileName
    9. Using stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read)
    10. Using reader As IExcelDataReader = ExcelReaderFactory.CreateReader(stream)
    11. Dim result As DataSet = reader.AsDataSet(New ExcelDataSetConfiguration() With {
    12. .ConfigureDataTable = Function(__) New ExcelDataTableConfiguration() With {
    13. .UseHeaderRow = True}})
    14. tables = result.Tables
    15. cboSheet.Items.Clear()
    16. For Each table As DataTable In tables
    17. cboSheet.Items.Add(table.TableName)
    18. Next
    19. End Using
    20. End Using
    21. End If
    22. End Using
    23. End Sub
    24. Private Sub cboSheet_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSheet.SelectedIndexChanged
    25. Dim dt As DataTable = tables(cboSheet.SelectedItem.ToString())
    26. DataGridView1.DataSource = dt
    27. End Sub
    28. End Class


    Nun hat diese Datei natürlich viele Spalten und ich möchte jetzt, dass ich auf Knopfdruck nur noch die Daten angezeigt haben, die in Spalte H zum Beispiel WA drin stehen haben.

    Wie gehe ich da vor?

    Danke

    Wasserlasser

    wasserlasser schrieb:

    nur noch die Daten angezeigt haben
    Sollen Zeilen oder Spalten oder beides ausgeblendet werden?
    Machst Du

    VB.NET-Quellcode

    1. With {.Filter = "Excel|*.xlsx;*.xls"}
    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!
    @wasserlasser Mein Code präzisiert Zeile 6 Deines Codes.
    Dein Problem lässt sich mit etwas SQL einfach lösen, dafür wäre der @ErfinderDesRades der bessere Ansprechpartner.
    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!
    Deine ganzen Daten befinden sich nun in einer untypisierten DataTable. Um jetzt die Sachen auch Spalte H rauszusuchen, klappt es mit LINQ:

    VB.NET-Quellcode

    1. Dim RelevantRows = tables(0).Rows.Cast(Of DataRow).Where(Function(x) x.ItemArray(8).ToString.Contains("WA"))
    Also: DataRowCollection zu ner IEnumerable(Of DataRow) machen und dann jede Row hernehmen, in der in Spalte 8 (= "H") irgendwo ein WA drinsteht.
    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.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Da sehe ich gerade, dass der Variablenname nicht dem Inhalt entspricht. RelevantCells ist falsch, RelevantRows trifft es. Ich änder das mal kurz in Post#5

    Dass scheinbar nix passiert, heißt, dass was passiert. Schreib in der Zeile nach meiner z.B.

    VB.NET-Quellcode

    1. MessageBox.Show(RelevantRows.Count.ToString)
    Dann solltest Du sehen, wieviele betroffene/passende Zeilen es gibt.
    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.