تهیه خروجی اکسل در Asp.Net MVC

تهیه خروجی اکسل در Asp.Net MVC

جهت دریافت خروجی اکسل از داده ها در یک برنامه Asp.Net MVC روش های متفاوتی وجود دارد و البته کتابخانه های رایگان زیادی نیز وجود دارد که این کار را برای ما تسهیل می‌کنند.

جهت دریافت خروجی روشی که معمولاً به کار می رود این است که داده های خروجی را در یک View نمایش می دهیم و آنگاه از آن View که در حال نمایش است یک خروجی اکسل تهیه می‌کنیم

اما اگر یک لیست جنریک (Generic List) داشته باشیم و بخواهیم با ساده ترین راه ممکن در کمترین زمان ممکن بدون این که آن را در View نمایش دهیم و همچنین از کتابخانه ها هم استفاده نکنیم باید به چه صورت عمل کنیم؟

یکی از روش ها همان روشی است که در Asp.Net وب فرم نیز استفاده می شد.

به این صورت که شئی از نوع GridView ایجاد می‌کنیم و سپس داده های مورد نظرمان را که در قالب یک جنریک لیست هستند را به آن GridView انتساب می‌دهیم.

در این مثال به خوبی مشاهده می‌کنید که چگونه از اشیائی که به عنوان کنترل در Asp.net  وب فرم استفاده می شدند، می توان در MVC هم استفاده کرد.

ابتدا یک پروژه جدید  در 5 MVC ایجاد کنید.

سپس یک مدل فرضی هم که شامل 10 نام به همراه شماره تلفن آن‌ها می باشد را نیز ایجاد کنید. قصد داریم از این ده عدد نام یک خروجی در قالب فایل اکسل تهیه کنیم:

پس کلاسی با نام Userdata ایجاد می‌کنیم که property های آن مشابه زیر باشد یعنی نام و شماره تلفن:

    public class Userdata
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Number { get; set; }
    }

 

و در یک کلاس فرضی دیگر تصور می‌کنیم لیستی از کاربران را از دیتابیس می‌خواند و بازگشت می دهد. نام این کلاس را UserDataService می گذاریم که به صورت زیر است:

public static class UserDataService
    {
        //داده های فرضی
        public static IEnumerable<Userdata> userdata = new List<Userdata>() {
            new Userdata{Id=1,Name="Arad",Number="121231"},
            new Userdata{Id=2,Name="Erfan",Number="234234"},
            new Userdata{Id=3,Name="Maryam",Number="234234"},
            new Userdata{Id=4,Name="Ali",Number="234234"},
            new Userdata{Id=5,Name="Majed",Number="5345345"},
            new Userdata{Id=6,Name="Pejman",Number="345345"},
            new Userdata{Id=7,Name="Shahriyar",Number="345345"},
            new Userdata{Id=8,Name="Mehdi",Number="34531"},
            new Userdata{Id=9,Name="Amin",Number="4445"},
            new Userdata{Id=10,Name="Marjan",Number="5435345"},
            };
        public static IEnumerable<Userdata> GetAllUserData()
        {
            return userdata;
        }
    }

 

اکنون در اکشن مورد نظرمان این لیست را واکشی می کنیم و در قالب خروجی اکسل آن را بازگشت می‌دهیم تا با صدا زدن آن اکشن فایل خروجی ایجاد شود و پنجره Save در مرورگر کاربر باز شود تا بتواند فایل را ذخیره کند.

     public ActionResult ExportToExcel()
        {
            string filename = "UserDetail";
            List<Userdata> userlist = UserDataService.GetAllUserData().ToList();
            GridView gv = new GridView();
            gv.DataSource = userlist;
            gv.DataBind();
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".xls");
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
            Response.Charset = "";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            gv.RenderControl(htw);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
            return View("index");
        }

دقت کنید که فضای نام System.Web.UI و System.Web.UI.WebControls و System.IO و همچنین فضای نام مدل ها را که در این پروژه shirazsun_excelExport.Models است را باید به کنترلر خود اضافه کنید.

 اکنون کار ما با کنترلر و مدل ها به پایان رسیده پس به سراغ View می رویم.

باید دکمه ای در صفحه وجود داشته باشد تا با کلیک روی آن فایل ایجاد شود در واقع با کلیک روی آن دکمه اکشن ExportToExcel اجرا شود.

بنابراین یک دکمه را در یک فرم قرار میدهیم که با کلیک روی آن عملیات مورد نظر مان انجام خواهد شد.

  @using (Html.BeginForm("ExportToExcel", "Home"))
    { 
    <input type="submit" id="submit" value="دریافت خروجی" />
    }

فایل پروژه را می توانید در پایین همین صفحه (فایل های ضمیمه) دانلود کنید دقت کنید که برای اجرای پروژه نیاز به  نرم افزار Visual Studio 2015  دارید.

قبل از اجرای پروژه  یک بار آن را Build  کنید تا به طور اتوماتیک فایل های مورد نیاز آن توسط restore package manager  دانلود و تامین گردد.

پیروز و سربلند باشید.

جهت اطلاع از جدید ترین مطالب سایت پیشنهاد می کنیم عضو خبرنامه شوید