Hey Leute,
ich möchte ein aus meinem Programm die Möglichkeit bieten, alle Gridviews nach Excel exportieren lassen zu können. Dasselbe gilt auch für einige Tabellen aus meinem Dataset. Bei diesen Dataset Tabellen klappt das auch wunderbar, nur ist der Export aus einem Datagridview sehr langsam. Hier mal mein Code:
Gibt es da eine schnellere Lösung?
Was haltet ihr außerdem von einer Speicherung der Daten in einem Array? Dann würde ich mir für jede Tabelle ein Array erstellen und es der Export Prozedur übergeben, die es dann liest und in die Excel übergibt? Leider waren meine ersten Versuche damit noch langsamer als mein Code da oben.
ich möchte ein aus meinem Programm die Möglichkeit bieten, alle Gridviews nach Excel exportieren lassen zu können. Dasselbe gilt auch für einige Tabellen aus meinem Dataset. Bei diesen Dataset Tabellen klappt das auch wunderbar, nur ist der Export aus einem Datagridview sehr langsam. Hier mal mein Code:
VB.NET-Quellcode
- Sub ExcelBestandsverzeichnis()
- Dim xlapp As New excel.Application
- If xlapp Is Nothing Then
- MessageBox.Show("Excel ist nicht installiert!")
- Return
- End If
- Dim xlwb As excel.Workbook
- Dim xlws As excel.Worksheet
- Dim c, r, k As Integer
- Try
- xlwb = xlapp.Workbooks.Add()
- xlws = DirectCast(xlwb.Sheets(1), excel.Worksheet) 'Konvertierung eines sheets in ein excel.worksheet und Deklarierung an das xlws Objekt
- xlws.Name = "Bestandsverzeichnis"
- k = 1 'Zeile der Spaltenüberschriften
- c = 1 'Startreihe der Werte
- r = 2 'Startzeile der Werte
- xlapp.Visible = True
- 'Spaltenüberschriften
- For Each column As DataGridViewColumn In dgvBestandsverzeichnis.Columns
- Dim Header As String = column.HeaderText
- xlws.Cells(1, k) = Header
- k += 1
- Next
- 'Feldwerte
- For Each row As DataGridViewRow In dgvBestandsverzeichnis.Rows
- For Each column As DataGridViewColumn In dgvBestandsverzeichnis.Columns
- 'für jede Spalte in jeder Reihe wird der Wert des Feldes an Excel übergeben
- Dim Value As String = row.Cells(column.Name).Value.ToString
- xlws.Cells(r, c) = Value
- c += 1
- Next
- r += 1
- c = 1
- Next
- Catch ex As Exception
- MsgBox(Err.Description)
- End Try
- End Sub
Gibt es da eine schnellere Lösung?
Was haltet ihr außerdem von einer Speicherung der Daten in einem Array? Dann würde ich mir für jede Tabelle ein Array erstellen und es der Export Prozedur übergeben, die es dann liest und in die Excel übergibt? Leider waren meine ersten Versuche damit noch langsamer als mein Code da oben.