in

DevWare GmbH

Blog- und Forum-Seite der Firma DevWare GmbH

Tibor Csizmadia

Report exportieren ins Excel Format

Heute hatte ich einmal die knifflige Aufgabe, einen Report über das ReportViewer-Control in das Excel Format zu exportieren. Eigentlich ist das eine ganz schöne Funktion, jedoch muss man bei der Definition des Reports auf einige Punkte achten, damit die Formatierung auch unter Excel noch zufriedenstellend aussieht:

Die TextBox-Elemente die auf einen Report platziert werden und nicht in der Daten-Matrix enthalten sind, sollten von den Ausmaßen an die Spalten der Matrix ausgerichtet sein. Wenn das nicht so ist wird beim Excel Export immer leere Spalten hinzugefügt, um so diese Textboxen zu platzieren. Das wäre nicht so schlimm, allerdings müssen, dann Zellen in den Datenzeilen verbunden werden und ich hatte dann genau das Problem, das die Zeilenumbruch-Formatierung nicht sauber funktioniert.

Bei der Suche nach einer Lösung bin ich auch noch auf den Parameter DeviceInfo in der Render- Funktion gestoßen, d.h. wenn man den Report per Code erzeugt und selber exportieren möchte kann man das ja wie folgt machen:

public void ExportReportToExcel(string sReportname, Dictionary<string, object> myParamValues)

{

string sOutputPath = "c:\\temp\\Export.xls";

LocalReport myReport = new LocalReport();

string deviceInfo =

"<DeviceInfo>" +

"<SimplePageHeaders>True</SimplePageHeaders>" +

"</DeviceInfo>";

myReport.ReportPath = sLieferscheinReport;

List<ReportParameter> myRepListe = new List<ReportParameter>();

foreach (string myItem in myParamValues.Keys)

     myRepListe.Add(new ReportParameter(myItem, myParamValues[myItem].ToString()));

myReport.SetParameters(myRepListe);

ReportSystem.Instance.LoadReportData(myReport, myParamValues);

Warning[] warnings;

string[] streamids;

string mimeType;

string encoding;

string extension;

string sCurrentAbsPath;

byte[] bytes;

string sFilename;

bytes = myReport.Render(

"Excel", deviceInfo, out mimeType, out encoding, out extension,

out streamids, out warnings);

using (FileStream fs = new FileStream(sOutputPath, FileMode.Create))

{

fs.Write(bytes, 0, bytes.Length);

fs.Close();

}

}

Dabei fragt man sich natürlich was darf/kann man alles in den XML-Parameter deviceInfo übergeben? Die Antwort findet man unter MSDN: http://msdn2.microsoft.com/en-us/library/aa179622(SQL.80).aspx

Comments

No Comments
Copyright (c) 2008 DevWare GmbH. All rights reserved.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems