Ich habe versucht, eine einfache Methode zum Exportieren von GridViews in Excel-Tabellen zu implementieren. Allerdings bin ich jetzt auf diesem für eine ganze Weile fest:ASP.NET: Die richtige Methode zum Exportieren von GridView nach Excel einschließlich dynamisch hinzugefügter Zeilen
Mein GridView
AutoGenerateColumns
Set true
hat, wie die Datenquelle dynamisch ist und nicht wirklich vorhersehbar (Anzahl der Spalten im Laufe der Zeit ändern). Die HeaderRow
erstellt es automatisch ist für mich nicht geeignet, also auch ShowHeader
-false
gesetzt Ich habe und meine eigene in OnRowCreated
Fall wie folgt aus:
if (e.Row.RowType == DataControlRowType.Header) {
gv.Controls[0].Controls.AddAt(0, GetHeader());
gv.Controls[0].Controls.AddAt(1, GetSubHeader());
}
wo GetHeader()
und beide GetSubHeader()
ein GridViewRow
(es gibt zwei Rück Zeilen in der Kopfzeile mit verschiedenen Colspans, Rowspans und so). Das alles funktioniert gut auf der Website, aber wenn ich versuche, die GridView
mit OpenXML wie diese zu exportieren:
ExcelPackage excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("List 1");
var totalCols = gv.Rows[0].Cells.Count;
var totalRows = gv.Rows.Count;
var headerRow = gv.HeaderRow;
for (int i = 0; i < totalCols; i++) {
workSheet.Cells[1,i+1].Value = headerRow.Cells[i].Text;
}
for (int i = 0; i < totalCols; i++) {
for (int j = 0; j < totalRows; j++) {
workSheet.Cells[j+2,i+1].Value = gv.Rows[j].Cells[i].Text;
}
}
return excel;
was ich eine Tabelle mit dem ursprünglichen HeaderRow ist, die versteckt ist - ich habe gedacht, ich überspringen soll der erste Zyklus offensichtlich - und dann die Zeilen mit den tatsächlichen Daten. Keine Spur der zwei Zeilen, die ich in OnRowCreated
hinzugefügt habe.
Könnte jemand bitte erklären, warum das passiert und wie ich das ausarbeiten kann? Die Methode sollte idealerweise immer das gesamte GridView so exportieren, wie es auf der Website angezeigt wird.
Hinweis: Der andere Weg mit HtmlTextWriter und GridView.RenderControl()
ist wahrscheinlich keine Option, da ich nicht in der Lage war, die Datei in Excel nach dem Download zu öffnen (OpenOffice ging gut) und dann las ich irgendwo, dass die Blätter nicht sind tatsächlich nutzbar für die Datenverarbeitung, die in diesem Fall entscheidend ist.
EDIT: Nachdem ich die beiden HeaderRow
s in OnRowDataBound
statt OnRowCreated
hinzugefügt, für sie die Schleife Konten, aber alles, was in dem Arbeitsblatt bekommt sind leere Felder, und es scheint auch, dass sie nicht berücksichtigt werden durch gv.Rows.Count
, wie Die Schleife erreicht nie die letzten zwei Zeilen in meiner Tabelle.
versuchte ich, das Debuggen und und in der Tat alles, was von gv.Rows[j].Cells[i].Text;
ist ein ""
zurückgegeben wird, obwohl die Zellen ihre Text
Eigenschaft einrichten und die Tabelle zeigt auf der Website OK.
Ich finde dieses Verhalten sehr verwirrend, ich denke, ich vermisse etwas Großes. Kann mir jemand sagen, warum das passiert?
Danke, aber wie ich oben erwähnt habe, funktioniert dies nicht, da Excel die heruntergeladene Datei nicht öffnen will. OpenOffice öffnet es jedoch ohne Probleme, was für mich sehr rätselhaft ist. – Epsiloney
Ich sehe aus Ihrem Code, dass Sie die ExcelPackage-Klasse verwenden. Wenn Ihr Code funktioniert, versuchen Sie es mit der Excel-Klasse. Und wie gesagt, meine Antwort ist nur ein Weg. Es gibt viele andere Beispiele. Mach einfach eine Suche. –