どのように私はASP.Net MVCのアプリでXLSへActiveReportをエクスポートするのですか?

StackOverflow https://stackoverflow.com/questions/946457

質問

私は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する

このブログは、あなたがそれを行う方法を正確に従うとする必要があることを、手順を詳細に説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top