كيف يمكنني تصدير ActiveReport إلى XLS في تطبيق ASP.NET MVC؟

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

سؤال

أنا غير متأكد من كيفية التصدير وثيقة تقرير ActiveReports الخاص بي إلى XLS في تطبيق ASP.NET MVC الخاص بي.

المفهوم الخاص بي حتى الآن هو الحصول على منسرة لأنواع التصدير وزر إرسال يقدم هذه القيمة إلى وحدة التحكم الخاصة بي. عندما أكون على وحدة التحكم، أجيد التقرير وتمريرها إلى طريقة التصدير الخاصة بي. لست متأكدا من عودة طريقة التصدير هذه. أحصل أيضا على خطأ خارج النطاق في طريقة XLSEXPort.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 غير فارغ.

ومع ذلك، أريد التعليق على التعليمات البرمجية بشكل عام. لا يتبع إجراء وحدة التحكم الخاصة بك في اتخاذ اتفاقيات ASP.NET MVC. لا ينبغي أن يكتب مباشرة إلى دفق الرد. أولا، من الصعب اختبار الوحدة. ثانيا، يميل إلى جعل عملك ينفجر في المسؤولية (إنه بالفعل حوالي 4 مرات أكبر مما كنت أفضل تحكمي أكبر ليكون) الاستجابة. تقدم تقليص العمل القصير و "عرض العودة ()" لا يفعل شيئا. سأفعل شيئا مثل:

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 وراء واجهة.) مع بعض الإبداع (إضافة PrPrupties إضافية لأشياء مثل اسم الملف، إلخ) ستتمكن من إعادة استخدام فئات النتائج * عبر مشروعك.

نصائح أخرى

يمكنك الرجوع إلى تطبيق نموذج معين في منشور المدونة هذا الذي تفاصيل حول كيفية تصدير التقارير باستخدام ActiveReports في تطبيق MVC.

http://blogs.gcpowertools.co.inouse2/02/exporting-Reports-created-using.html.

تشرح هذه المدونة بالتفصيل الخطوات التي تحتاج إلى اتباعها والضبط كيفية القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top