| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

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;

int counter = 0;

//Kopfzeilen erzeugen
foreach (DataGridViewColumn column in dgw.Columns)
{
excelApp.Cells[1, counter + 1] = column.HeaderText.ToString();
counter++;
}

for (int i = 2; i < dgw.Rows.Count; i++)
{
DataGridViewRow row = dgw.Rows;

for (int j = 0; j < row.Cells.Count; j++)
{
excelApp.Cells[i + 1, j + 1] = row.Cells[j].FormattedValue.ToString();
}//FOR J
}//FOR I

excelApp.ActiveWorkbook.SaveCopyAs(dateipfad);
excelApp.ActiveWorkbook.Saved = true;

excelApp.Quit();
}

[/code]
11.05.2011
Bibo1987 256 1 8
4 Antworten
2
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...
11.05.2011
KN 1,7k 1 8
1
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.
11.05.2011
Fredo 575 1 9
1
Hey, Genau das war's :)

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

excelApp.ActiveWorkbook.SaveCopyAs(dateipfad);
excelApp.ActiveWorkbook.Saved = true;
excelApp.Quit();
}


Danke für die Hilfe!

PS:
Um dies so nutzten zu können, werden folgende Librarys gebraucht:
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;


Und es muss ein Assemblyverweis zur "Microsoft Excel 12.0 Objektbibliothek" gesetzt werden, damit das so funktioniert!

Viele Grüße
Bibo
12.05.2011
Bibo1987 256 1 8
0
Das ist natürlich eine super Sache, die logisch auch funktionieren würde...

Wie muss ich denn die FOREACH Schleife anpassen?
11.05.2011
Bibo1987 256 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH