Einzelne Excel Zellen auslesen, in Forms bearbeiten und danach ins Word "laden"

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von StellaBee.

    Einzelne Excel Zellen auslesen, in Forms bearbeiten und danach ins Word "laden"

    Hallo :)

    Ich habe folgendes Problem: Ich möchte gerne eine Exceldatei in Windows Forms auslesen aber nur gewisse Zellen (klar bestimmte), danach möchte ich diese dem User anzeigen und ihm die Möglichkeit zur Bearbeitung geben (Text ergänzen etc.) schliesslich werden die einzelne Texte in ein Word übertragen. Das Excel soll bei der ganzen Aktion nicht verändert werden.

    Ich bin relativ neu im Vb.net Business und es kann gut sein, dass eine Lösung im Forum zu finden wäre oder das die Lösung extrem einfach ist. Danke für eure Nachsicht ^^

    Nun zu meinem Code: Ich kann die Excel Datei einlesen und das richtige "Sheet" per Combobox auswählen und es wird mir auch die ganze Exceltabelle im dgv angezeigt. Leider brauch ich aber nur einige wenige Zellen davon.

    Danke schon jetzt für eure Hilfe!!! :)

    VB.NET-Quellcode

    1. Dim tables As DataTableCollection
    2. 'Dateipfad öffnen
    3. Private Sub btn_ExcelSuchen_Click(sender As Object, e As EventArgs) Handles btn_ExcelSuchen.Click
    4. ' leeren von Datagridview und Pfadtext
    5. txt_ExcelDokument.Clear()
    6. dgv_Angebotspos.Columns.Clear()
    7. 'Ordner wird geöffnet
    8. ofd_Excel.Filter = "Excel Files|*.xlsx; *.xls;"
    9. If ofd_Excel.ShowDialog() = DialogResult.OK Then
    10. Excel_Einlesen()
    11. End If
    12. End Sub
    13. Private Sub Excel_Einlesen()
    14. 'Läd die Exceldatei in das DataSet
    15. txt_ExcelDokument.Text = ofd_Excel.FileName
    16. Try
    17. Using Stream = File.Open(ofd_Excel.FileName, FileMode.Open, FileAccess.Read)
    18. Using reader As IExcelDataReader = ExcelReaderFactory.CreateReader(Stream)
    19. Dim result As DataSet = reader.AsDataSet(New ExcelDataSetConfiguration() With {
    20. .ConfigureDataTable = Function(__) New ExcelDataTableConfiguration() With {
    21. .UseHeaderRow = True}})
    22. 'Dropdown für die Auswahl des Excel-Blattes (es werden die ersten 5 Blätter angezeigt)
    23. tables = result.Tables()
    24. cbx_ExcelBlatt.Items.Clear()
    25. Dim zaehler As Integer = 0
    26. For Each table As DataTable In tables
    27. zaehler += 1
    28. If zaehler < 6 Then
    29. cbx_ExcelBlatt.Items.Add(table.TableName)
    30. End If
    31. Next
    32. End Using
    33. End Using
    34. Catch ex As Exception
    35. MessageBox.Show(ex.Message, "Exceldatei kann nicht geladen werden")
    36. txt_ExcelDokument.Clear()
    37. dgv_Angebotspos.Columns.Clear()
    38. dgv_Angebotspos.Rows.Clear()
    39. End Try
    40. End Sub
    41. 'ganzes Excelblatt wird in das dgv geladen
    42. Private Sub cbx_ExcelBlatt_selectedindexchanged(sender As Object, e As EventArgs) Handles cbx_ExcelBlatt.SelectedIndexChanged
    43. Dim dt_pos As DataTable = tables(cbx_ExcelBlatt.SelectedItem.ToString())
    44. dgv_Angebotspos.DataSource = dt_pos
    45. End Sub
    Willkommen im Forum.

    Zeile#30-36: ? Für sowas gibt's ne For-Schleife.

    Zum Problem: Das liegt offensichtlich in Z#53. Werd dort einfach spezifischer.
    • willst Du die ersten x Zeilen, dann: dgv_Angebotspos.DataSource = dt_pos.Rows.Cast(Of Data.DataRow).Take(x - 1)
    • willst Du x Zeilen überspringen, dann: dgv_Angebotspos.DataSource = dt_pos.Rows.Cast(Of Data.DataRow).Skip(x)
    • Skip und Take können natürlich kombiniert werden
    • willst Du nur … Moment.
    Was ist denn eigentlich Dein Auswahlkriterium? Welche Zeilen sollen denn (nicht) angezeigt werden?
    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.
    Hey, Vielen Dank für deine Antwort. :)

    Das Excel, welches die User einlesen werden ist immer genau gleich aufgebaut. Ich möchte daher die Zelle "E4", "F4" und so weiter einlesen. Diese Werte möchte ich danach in einem DGV (oder ähnlich) auf dem Form darstellen.

    Ich versuche es mal mit deinem Vorschlage :)