Moin zusammen.
Ich hab' mir ne Methode für einen Excel-Export gebastelt, welche mir Daten aus mehreren Gebundenen oder ungebundenen DataGridViews in jeweils eine DataTable
packt und die dann in eine gemeinsame Excel-Datei mit mehreren Worksheets Exportiert.
Im Beispiel meines Urlaubsplaners hab ich DGVs, wo ich die MitarbeiterID-Spalte im DGV ausgeblendet hab. Die soll natürlich auch nicht mit in die Excel-Datei.
Filtere ich die ausgeblendete Spalte im Code nicht weg, kommt die mit in die Excel - es läuft aber sauber durch.
Filtere ich die aber raus kommt er komischerweise mit der Column-Anzahl nicht klar, obwohl die übereinstimmend ist (das seh ich ja an Debug.Print).... habich was übersehen?
Bei Zeile 35 läuft er dann in den Fehler für die Dezember-Col..
Spoiler anzeigen
Hier noch die Debug-Print-Ausgabe:
Spoiler anzeigen
Ich hab' mir ne Methode für einen Excel-Export gebastelt, welche mir Daten aus mehreren Gebundenen oder ungebundenen DataGridViews in jeweils eine DataTable
packt und die dann in eine gemeinsame Excel-Datei mit mehreren Worksheets Exportiert.
Im Beispiel meines Urlaubsplaners hab ich DGVs, wo ich die MitarbeiterID-Spalte im DGV ausgeblendet hab. Die soll natürlich auch nicht mit in die Excel-Datei.
Filtere ich die ausgeblendete Spalte im Code nicht weg, kommt die mit in die Excel - es läuft aber sauber durch.
Filtere ich die aber raus kommt er komischerweise mit der Column-Anzahl nicht klar, obwohl die übereinstimmend ist (das seh ich ja an Debug.Print).... habich was übersehen?
Bei Zeile 35 läuft er dann in den Fehler für die Dezember-Col..
VB.NET-Quellcode
- Public Sub ExportDgvsToExcel(DI As Dictionary(Of DataGridView, String))
- Dim excelFile = saveAs("Excel-Dateien (*.xlsx)|*.xlsx")
- If excelFile = "" Then Return
- If File.Exists(excelFile) Then File.Delete(excelFile)
- For Each entry In DI
- Dim dgv = entry.Key
- Dim wsn = entry.Value
- ExportDgvWsnToExcel(dgv, wsn, excelFile)
- Next
- If msgQuestionInfo($"Der Export wurde unter {excelFile} gespeichert.{Environment.NewLine}Soll die Datei geöffnet werden?") = DialogResult.Yes Then
- Process.Start(excelFile)
- End If
- End Sub
- Private Sub ExportDgvWsnToExcel(dgv As DataGridView, wsn As String, excelFile As String)
- Dim eFi = New FileInfo(excelFile)
- Using pck As New ExcelPackage(eFi)
- Dim wks = pck.Workbook.Worksheets.Add(wsn)
- Dim bsDGV = DirectCast(dgv.DataSource, BindingSource)
- Dim dtExport As New DataTable
- If bsDGV IsNot Nothing Then 'DGV ist gebunden
- dtExport = bsDGV.DataTable.DefaultView.ToTable()
- Else 'DGV ist ungebunden
- Dim iCol = 0 'Test für Debug.Print
- For Each col As DataGridViewColumn In dgv.Columns
- If col.Visible = True Then dtExport.Columns.Add(col.HeaderText) : Debug.Print($"{col.HeaderText}|col-add|{iCol}") : iCol += 1
- Next
- For Each rw As DataGridViewRow In dgv.Rows
- Dim irCol = 0 'Test für Debug.Print
- dtExport.Rows.Add()
- For Each cell As DataGridViewCell In rw.Cells
- If cell.OwningColumn.Visible = True Then
- Debug.Print($"{cell.OwningColumn.HeaderText}|row-add|{irCol}") : irCol += 1
- If cell.Value IsNot Nothing Then
- dtExport.Rows(dtExport.Rows.Count - 1)(cell.ColumnIndex) = cell.FormattedValue.ToString
- Else
- dtExport.Rows(dtExport.Rows.Count - 1)(cell.ColumnIndex) = ""
- End If
- End If
- Next
- Next
- End If
- wks.Cells("A1").LoadFromDataTable(dtExport, True)
- pck.Save()
- End Using
- End Sub
Hier noch die Debug-Print-Ausgabe:
Quellcode
- Mitarbeiter|col-add|0
- Gesellschaft|col-add|1
- Standort|col-add|2
- Urlaubsanspruch|col-add|3
- Urlaub verplant|col-add|4
- Urlaub unverplant|col-add|5
- Resturlaub Vorjahr|col-add|6
- Krank|col-add|7
- Januar|col-add|8
- Februar|col-add|9
- März|col-add|10
- April|col-add|11
- Mai|col-add|12
- Juni|col-add|13
- Juli|col-add|14
- August|col-add|15
- September|col-add|16
- Oktober|col-add|17
- November|col-add|18
- Dezember|col-add|19
- Mitarbeiter|row-add|0
- Gesellschaft|row-add|1
- Standort|row-add|2
- Urlaubsanspruch|row-add|3
- Urlaub verplant|row-add|4
- Urlaub unverplant|row-add|5
- Resturlaub Vorjahr|row-add|6
- Krank|row-add|7
- Januar|row-add|8
- Februar|row-add|9
- März|row-add|10
- April|row-add|11
- Mai|row-add|12
- Juni|row-add|13
- Juli|row-add|14
- August|row-add|15
- September|row-add|16
- Oktober|row-add|17
- November|row-add|18
- Dezember|row-add|19
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"