DGV Export zu Excel

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    DGV Export zu Excel

    Hallo Zusammen,

    Ich habe ein Datagridview mit 8 Spalten, davon sind 2 Spalten Gebundene Combobox Felder.

    Nun wenn ich dieses DGV mit folgendem Code Exportieren möchte:

    VB.NET-Quellcode

    1. If System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Stückliste.xls") Then
    2. Kill(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Stückliste.xls")
    3. End If
    4. Me.Artikel_stuecklisteBindingSource.Sort = "id ASC"
    5. If ((Artikel_stuecklisteDataGridView.Columns.Count = 0) Or (Artikel_stuecklisteDataGridView.Rows.Count = 0)) Then Exit Sub
    6. Dim XlApp = New Excel.Application With {.Visible = True}
    7. XlApp.Workbooks.Add(Excel.XlSheetType.xlWorksheet)
    8. Dim xlWS = XlApp.ActiveSheet
    9. xlWS.Name = "Stückliste"
    10. 'Copy visible data from DGV to Excel
    11. Dim columnCollection As DataGridViewColumnCollection = Artikel_stuecklisteDataGridView.Columns
    12. Dim currentVisibleColumn As DataGridViewColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
    13. Dim lastColumnExported As DataGridViewColumn = currentVisibleColumn
    14. Dim visibleColumnCount As Integer = columnCollection.GetColumnCount(DataGridViewElementStates.Visible)
    15. 'Finally export the data
    16. For c = 1 To visibleColumnCount
    17. xlWS.Cells(1, c) = currentVisibleColumn.HeaderText
    18. currentVisibleColumn = columnCollection.GetNextColumn(lastColumnExported, DataGridViewElementStates.Visible, DataGridViewElementStates.None)
    19. lastColumnExported = currentVisibleColumn
    20. Next
    21. 'Only export visible cells
    22. For r = 0 To Artikel_stuecklisteDataGridView.Rows.Count - 1
    23. 'Reset values
    24. currentVisibleColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
    25. lastColumnExported = currentVisibleColumn
    26. For c = 1 To visibleColumnCount
    27. Dim value = Artikel_stuecklisteDataGridView.Rows(r).Cells(currentVisibleColumn.Index).Value
    28. If value.ToString <> vbNullString Then
    29. xlWS.Cells(r + 2, c) = value.ToString()
    30. End If
    31. currentVisibleColumn = columnCollection.GetNextColumn(lastColumnExported, DataGridViewElementStates.Visible, DataGridViewElementStates.None)
    32. lastColumnExported = currentVisibleColumn
    33. Next
    34. Next
    35. 'Autosize columns in excel
    36. Dim columns = xlWS.UsedRange.Columns
    37. columns.AutoFit()
    38. XlApp.DisplayAlerts = False 'vor dem Speichern - vermeidet eventuelle Dialoge
    39. xlWS.SaveAs(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "/" & Id_anlageTextBox1.Text & " - Stückliste.xls")


    Nun ist das Prolbem das bei den Combobox-Spalten die ArtikelID hingeschriben wird und nicht den Werte-Text.


    Kann mir jemand helfen?
    Natürlich nicht. Effektiv steht ja auch nur eine ID in jener Spalte. Dass im DGV was anderes zu sehen ist, liegt an der Darstellung (ComboBoxSpalte wird als Hilfsmittel genommen, um einen anderen Wert einer ID anzuzeigen). Daher musst Du schon im Exportcode die Zweittabelle herzitieren, um an die dargestellten Werte zu kommen.
    Bzw.: mit ner DataTable oder gleich nem tDS geht das alles sehr viel leichter.
    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.