ich möchte aus einem DataGridView ein Excel File erstellen lassen. Dazu verwende ich das Script ganz unten an meiner Frage.
Jetzt ist das Problem, das die ich die erste und die letzte Spalte nicht in der Excel Datei angezeigt haben möchte.
Wenn ich das DataGridView kopiere und dort vor dem erstellen des Excelfiles die Spalten lösche, werden diese auch in der Anzeige gelöscht, weil beide auf die selbe DataSource verweisen.
Deshalb möchte ich excelApp manipulieren und die letzte und danach die erste Spalte löschen.
Hat da jemand einen Vorschlag? Oder sogar eine Lösung, die weitaus effektiver ist als meine?
Vielen Dank im Voraus!
//EDIT Was ich vergessen habe zu erwähnen: Die Funktion soll so gegliedert werden, das es egal ist, ob dort 10 oder 100 Spalten drin sind, es sollen immer nur die letzte und die erste entfernt werden.
public static void ExportExcel(string dateipfad, DataGridView dgw) {
if (dateipfad == null) throw new ArgumentNullException("dateipfad");
var excelApp = new ApplicationClass(); excelApp.Application.Workbooks.Add(Type.Missing); excelApp.Columns.ColumnWidth = 30;
Zur Änderung der For-Each-Schleife: Du kannst entweder eine for ( i = 2; i < dgw.Columns - 1; ++i ) - Schleife daraus machen, oder du kannst in der For-Each-Schleife den Colums-Index abfragen. Und wenn der Index eben gleich 1 oder dgw.Columns ist, dann machst du ein continue...
Ich würde, anstelle diese Spalten nachträglich im Excel zu löschen, sie gar nicht exportieren. In deiner foreach bzw. for-Schleife lässt du einfach die erste und die letzte Spalte aus.
Jetzt habe ich die foreach durch eine for-Schleife ausgetauscht und die beiden verschachtelten Schleifen angepasst, das die erste und die letzte Spalte nicht mit ausgegeben wird.
Hier der Code:
public static void ExportExcel(string dateipfad, DataGridView dgw) {
if (dateipfad == null) throw new ArgumentNullException("dateipfad");
if (dgw == null) throw new ArgumentNullException("dgw");
var excelApp = new ApplicationClass(); excelApp.Application.Workbooks.Add(Type.Missing); excelApp.Columns.ColumnWidth = 30;
//Kopfzeilen erzeugen for (int k = 1; k < dgw.Columns.Count - 1; k++ ) { excelApp.Cells[1, k] = dgw.Columns[k].HeaderText.ToString(); //column.HeaderText.ToString(); }
for (int i = 1; i <= dgw.Rows.Count; i++) { DataGridViewRow row = dgw.Rows[i-1];
for (int j = 1; j < row.Cells.Count-1; j++) { excelApp.Cells[i + 1, j] = row.Cells[j].FormattedValue.ToString(); }//FOR J }//FOR I