どのように私はASP.Net MVCのアプリでXLSへActiveReportをエクスポートするのですか?
-
09-09-2019 - |
質問
私はasp.net MVCのアプリでXLSに私のあるActiveReportsのレポート文書をエクスポートについて移動する方法がわからないと思います。
私の考え方は、これまでの輸出の種類のドロップダウンと私のコントローラにその値を提出し、送信ボタンを持つことです。私は、コントローラにいる時、私はレポートを再生成し、私のExportメソッドに渡します。私は、このExportメソッドの戻り値を持っているかわからないんだけど。私はまた、実際のxlsExport.Export法に範囲エラーのうちを取得しています。以下は私のExportメソッドです。また注意することは、reportBase.ReportはActiveReport3オブジェクトです。
private ActionResult Export(ReportBase reportBase)
{
Response.ClearContent();
Response.ClearHeaders();
var exportType = Request.Form["exportType"];
switch (exportType)
{
case "RTF":
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=report.rtf");
var rtfExport = new RtfExport();
rtfExport.Export(reportBase.Report.Document, Response.OutputStream);
break;
case "TIFF":
Response.ContentType = "image/tiff";
Response.AddHeader("Content-Disposition", "attachment;filename=report.tif");
var tiffExport = new TiffExport();
var filePath = System.IO.Path.GetTempFileName();
tiffExport.Export(reportBase.Report.Document, filePath);
var fileStream = System.IO.File.Open(filePath, System.IO.FileMode.Open);
var bufferLength = (int)fileStream.Length;
var output = new byte[bufferLength];
var bytesRead = fileStream.Read(output, 0, bufferLength);
Response.OutputStream.Write(output, 0, bytesRead);
System.IO.File.Delete(filePath);
break;
case "XLS":
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=report.xls");
var xlsExport = new XlsExport();
xlsExport.Export(reportBase.Report.Document, Response.OutputStream);
break;
}
Response.Flush();
Response.End();
return View("Display", reportBase);
}
解決
私はあなたの問題の答えを持っていません。完全な例外メッセージを含めると役立つだろう。そこに私はあなたを助けるのに十分な情報がないのですが、私はreportBase.Report.Documentがnullでないことを確認するためにチェックしたい。
しかし、私は一般的にあなたのコードにコメントをしたいです。お使いのコントローラのアクションは、ASP.NET MVCの規則を次のようされていません。それはREPONSEストリームに直接書き込むべきではありません。第一に、それはユニットテストするのは難しいです。第二に、それは(それは私があることを私の最大のコントローラーを好むよりも、すでに約4倍の大きさだ)Response.Endのアクションが短くカットし、「ビューを返す()」何もしないされ、あなたの行動は責任で爆発する傾向があります。私のような何かを考えます:
var exportType = Request.Form["exportType"];
switch (exportType)
{
case "RTF":
return new RtfExportResult(reportBase.Report.Document);
case "TIFF":
return new TiffExportResult(reportBase.Report.Document);
case "XLS":
return new XlsExportResult(reportBase.Report.Document);
}
return View("Error"); // unsupported export type
次に、あなたのXlsExportResultは次のようになります:
public class XlsExportResult : ActionResult
{
private readonly Document document;
public XlsExportResult(Document document)
{
this.document= document;
}
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment;filename=report.xls");
var xlsExport = new XlsExport();
xlsExport.Export(this.document, response.OutputStream);
}
}
あなたは、より簡単にのみXlsExportの一部を行使するためのテストを書くことができます。 (私はまた、インタフェースの後ろにXlsExportを非表示にする方法を見つけるだろう。)いくつかの創造性で(ファイル名のようなもののための追加prpertiesを追加する、など)あなたのプロジェクト全体で*結果のクラスを再利用できるようになります。
他のヒント
あなたはMVCアプリケーションであるActiveReportsを使用してレポートをエクスポートする方法について、このブログの記事で与えられたサンプルアプリケーションを参照することができます。
http://blogs.gcpowertools.co。中/ 2012/02 /エクスポート、レポート作成の-using.htmlする
このブログは、あなたがそれを行う方法を正確に従うとする必要があることを、手順を詳細に説明します。