Benutzer mit den meisten Antworten
Exceldatei aus DataGridView schreiben

Frage
-
Hallo zusammen,
Ich möchte aus meinem DataGridView eine Exceldokument exportieren.
Dies können auch 500 Zeilen und 20 Spalten sein.
Gibt es so eine Funktion die ich irgendwoher Importieren kann?
Bei meinem verwendeten Code dauert es sehr lange bzw. kommt es zu Fehlern bei großen Tabellen:
SaveFileDialog1.Filter = "Excel Document (*.xlsx)|*.xlsx" Dim xlApp As Microsoft.Office.Interop.Excel.Application Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet Dim misValue As Object = System.Reflection.Missing.Value Dim i As Integer Dim j As Integer xlApp = New Microsoft.Office.Interop.Excel.Application xlWorkBook = xlApp.Workbooks.Add(misValue) xlWorkSheet = xlWorkBook.Sheets("Tabelle1") For i = 0 To DataGridView2.RowCount - 2 For j = 0 To DataGridView2.ColumnCount - 1 For k As Integer = 1 To DataGridView2.Columns.Count xlWorkSheet.Cells(1, k) = DataGridView2.Columns(k - 1).HeaderText xlWorkSheet.Cells(i + 2, j + 1) = DataGridView2(j, i).Value.ToString() Next Next Next xlWorkSheet.SaveAs(SaveFileDialog1.FileName) xlWorkBook.Close() xlApp.Quit() releaseObject(xlApp) releaseObject(xlWorkBook) releaseObject(xlWorkSheet) MsgBox("Erfolgreich gespeichert" & vbCrLf & "Datei gespeichert unter : " & SaveFileDialog1.FileName, MsgBoxStyle.Information, "Information") Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub
Liebe Grüße
Johannes
Viele Grüße Johannes Harzer
Donnerstag, 17. September 2020 11:37
Antworten
-
Hi,
in VB wird " in einem String verdoppelt:
thecsvfile = thecsvfile & """" & cell.FormattedValue.replace(",", "") & ""","
Besser sieht man es bspw. hier:
Dim x As String = """Hallo Welt"""
Wenn man x ausgibt, wird dann:
"Hallo Welt"
zu sehen sein.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Donnerstag, 17. September 2020 20:19
- Als Antwort markiert joHarz Freitag, 18. September 2020 08:45
Donnerstag, 17. September 2020 20:19Moderator
Alle Antworten
-
Hi Lohannes,
eine sehr schnelle Variante auch bei großen Datenmengen ist die Ausgabe als csv-Datei. Diese kann dann problemlos in Excel geöffnet werden. Noch schnelle geht es, wenn nicht auf die DatGridView-Zellen zugegriffen wird, sondern auf die DataSource.--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, TricksDonnerstag, 17. September 2020 12:00 -
Hallo,
Ich habe schon eine CSV export funktion.
Dabei habe ich folgendes Problem:
In meinen Zelle vom DataGridView gibt es Texte mit Zeilenumbruch.
Im CSV-export wirken sich diese Zeilenumbrüche auch aus --> Trennzeichen für Spalten sind Kommas
Somit kann ich aus dem CSV-Export keine Exceldatei machen, die den selben innhalt hat wie mein DataGridView.
Hat jemad eine Lösung für dieses Problem.
Viele Grüße Johannes Harzer
Donnerstag, 17. September 2020 12:44 -
Hallo Johannes,
dafür gibt es die Zeichen, mit denen man die Werte umfassen kann. Bspw. "Hier kommt ein Text". Die sollten in der CSV Datei immer drin stehen, wenn es vorkommen kann, dass irgendwo die Spaltentrennzeichen oder Zeilenumbrüche vorkommen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, RemotesupportDonnerstag, 17. September 2020 14:54Moderator -
Vielen Dank für die Antwort,
Hier ist mein Quellcode:
SaveFileDialog1.Filter = "CSV Document (*.csv)|*.csv" If SaveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 'create empty string Dim thecsvfile As String = String.Empty 'get the column headers For Each column As DataGridViewColumn In DataGridView2.Columns thecsvfile = thecsvfile & column.HeaderText & "," Next 'trim the last comma thecsvfile = thecsvfile.TrimEnd(",") 'Add the line to the output thecsvfile = thecsvfile & vbCr & vbLf 'get the rows For Each row As DataGridViewRow In DataGridView2.Rows 'get the cells For Each cell As DataGridViewCell In row.Cells thecsvfile = thecsvfile & cell.FormattedValue.replace(",", "") & "," Next 'trim the last comma thecsvfile = thecsvfile.TrimEnd(",") 'Add the line to the output thecsvfile = thecsvfile & vbCr & vbLf Next 'write the file My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, thecsvfile, False)
Bedeutet dies, ich muss zwei mal ein """ in die Zeile einfügen?
thecsvfile = thecsvfile & cell.FormattedValue.replace(",", "") & ","
allerdings erkennt er es nicht als " im Quellcode
Danke für eure Hilfe
Viele Grüße Johannes Harzer
Donnerstag, 17. September 2020 16:49 -
Hi,
in VB wird " in einem String verdoppelt:
thecsvfile = thecsvfile & """" & cell.FormattedValue.replace(",", "") & ""","
Besser sieht man es bspw. hier:
Dim x As String = """Hallo Welt"""
Wenn man x ausgibt, wird dann:
"Hallo Welt"
zu sehen sein.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Donnerstag, 17. September 2020 20:19
- Als Antwort markiert joHarz Freitag, 18. September 2020 08:45
Donnerstag, 17. September 2020 20:19Moderator -
Hallo Stefan,
vielen Dank für die Antwort. Auf dem Fahrrad Richtung Heimat ist mir dann auch eingefallen, dass man das so noch mal ausprobieren hätte können.
Hat jemand noch eine einfache Methode um aus der CSV-Datei eine .xlsx zu machen? Gibt es da Erfahrungswerte?
Viele Grüße Johannes Harzer
Freitag, 18. September 2020 08:55 -
Hallo Johannes,
aus CSV eine xls oder XLS Datei zu erstellen, geht recht einfach über die JET Engine (auf jedem Windows System vorhanden aber nur 32 Bit und nur für das alte .xls Format) oder über ACE (muss auf so gut wie jedem System noch installiert werden, gibt es für 32 und für 64 Bit, muss zur ggfs. installierten Office Variante passen, kann dafür aber sowohl die alten .xls als auch die neuen .xlsx Formate).
Codebeispiel muss ich mal schauen, wo ich ein passendes rumliegen habe.
Wer es etwas komfortabler mag und die Exceldatei bspw. auch mal formatieren oder Formeln, ... verwenden möchte, kann sich auch mal das Syncfusion Excel-Framework anschauen. Die Syncfusion Komponenten gibt es im Rahmen einer Community Lizenz auch für kommerzielle Zwecke kostenlos.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, RemotesupportFreitag, 18. September 2020 10:46Moderator