تبدیل اطلاعات در DataTable به Excel در MVC

در این مقاله قصد داریم آموزشی درباره تبدیل کردن داده های موجود در یک Data Tabel به یک فایل Excel در Mvc بدهیم

تبدیل اطلاعات در DataTable به  Excel  در MVC

DataTableچیست ؟ DataTableیک کلاس برای ذخیره  داده ها به صورت سطری و ستونی است که در فضای نام System.Data وجود دارد که امکان انتخاب ، تکرار و اضافه کردن داده در آن وجود دارد

برای شروع به کار یک بانک اطلاعاتی به نام TestDB و یک جدول به نام Employee ایجاد کنید.

    CREATE TABLE [dbo].[Employee](  
    [ID] [int] IDENTITY(1,1) NOT NULL,  
    [Name] [varchar](50) NULL,  
    [Email] [varchar](500) NULL,  
    [Country] [varchar](50) NULL  
    ) ON [PRIMARY]  
    GO

 

وحال دراین مرحله شروع به ثبت داده به صورت دستی درآن میکنیم

در این مرحله ویژوال استادیو را باز کرده و یک پروژه از نوع Mvc ایجاد میکنیم

در این مرحله روی پروژه راست کلیک کرده و Manage Nuget  را انتخاب کرده و در قسمت جستجو، ClosedXML را جستجو کنید

 

حال دراین مرحله روی Models راست کلیک کرده ویک کلاس به نام ExportDataTableToExcelModel ایجاد میکنیم

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
      
    namespace ExportDataTableToExcelInMVC4.Models {  
        public class ExportDataTableToExcelModel {  
            public int Id {  
                get;  
                set;  
            }  
            public string Name {  
                get;  
                set;  
            }  
            public string Email {  
                get;  
                set;  
            }  
            public string Country {  
                get;  
                set;  
            }  
        }  
    }

روی پروژه راست کلیک کرده ویک کنترلر به نام ExportData ایجاد میکنیم

وکد های زیر را داخل کنترلر خود بنویسید

     
    using System;  
    using System.Collections.Generic;  
    using System.Configuration;  
    using System.Data;  
    using System.Data.SqlClient;  
    using System.Linq;  
    using System.Web;  
    using System.Web.Mvc;  
    using ExportDataTableToExcelInMVC4.Models;  
    using ClosedXML;  
    using ClosedXML.Excel;  
    using System.IO;  
      
    namespace ExportDataTableToExcelInMVC4.Controllers {  
        public class ExportDataController: Controller {  
            public ActionResult Index() {  
                String constring = ConfigurationManager.ConnectionStrings["RConnection"].ConnectionString;  
                SqlConnection con = new SqlConnection(constring);  
                string query = "select * From Employee";  
                DataTable dt = new DataTable();  
                con.Open();  
                SqlDataAdapter da = new SqlDataAdapter(query, con);  
                da.Fill(dt);  
                con.Close();  
                IList < ExportDataTableToExcelModel > model = new List < ExportDataTableToExcelModel > ();  
                for (int i = 0; i < dt.Rows.Count; i++) {  
                    model.Add(new ExportDataTableToExcelModel() {  
                        Id = Convert.ToInt32(dt.Rows[i]["Id"]),  
                        Name = dt.Rows[i]["Name"].ToString(),  
                        Email = dt.Rows[i]["Email"].ToString(),  
                        Country = dt.Rows[i]["Country"].ToString(),  
                    });  
                }  
                return View(model);  
            }  
      
            public ActionResult ExportData() {  
                String constring = ConfigurationManager.ConnectionStrings["RConnection"].ConnectionString;  
                SqlConnection con = new SqlConnection(constring);  
                string query = "select * From Employee";  
                DataTable dt = new DataTable();  
                dt.TableName = "Employee";  
                con.Open();  
                SqlDataAdapter da = new SqlDataAdapter(query, con);  
                da.Fill(dt);  
                con.Close();  
      
                using(XLWorkbook wb = new XLWorkbook()) {  
                    wb.Worksheets.Add(dt);  
                    wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  
                    wb.Style.Font.Bold = true;  
      
                    Response.Clear();  
                    Response.Buffer = true;  
                    Response.Charset = "";  
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";  
                    Response.AddHeader("content-disposition", "attachment;filename= EmployeeReport.xlsx");  
      
                    using(MemoryStream MyMemoryStream = new MemoryStream()) {  
                        wb.SaveAs(MyMemoryStream);  
                        MyMemoryStream.WriteTo(Response.OutputStream);  
                        Response.Flush();  
                        Response.End();  
                    }  
                }  
                return RedirectToAction("Index", "ExportData");  
            }  
      
            private void releaseObject(object obj) {  
                try {  
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);  
                    obj = null;  
                } catch {  
                    obj = null;  
                } finally {  
                    GC.Collect();  
                }  
            }  
        }  
    }

حال یک view  از نوع کلاس ExportDataTableToExcelModels ایجاد میکنیم.

 در مرحله کد های زیر را  داخل Viewخود بنویسید

    @model IEnumerable  
    <ExportDataTableToExcelInMVC4.Models.ExportDataTableToExcelModel>  
      
    @{  
    ViewBag.Title = "Index";  
    }  
    @using (Html.BeginForm("ExportData", "ExportData", FormMethod.Post))  
    {   
      
        <p style="background-color: red; color: white; font-size: 20pt; font-weight: bold; padding: 10px; text-align: center;">  
    Export DataTable To Excel In MVC 4   
    </p>  
        <table style="background-color: white; width: 100%;">  
            <tr>  
                <th style="border: 2px solid black; text-align: left; width: 20%; padding-left: 20px;">  
    @Html.DisplayNameFor(model => model.Name)  
    </th>  
                <th style="border: 2px solid black; text-align: center; width: 20%">  
    @Html.DisplayNameFor(model => model.Email)  
    </th>  
                <th style="border: 2px solid black; text-align: center; width: 20%">  
    @Html.DisplayNameFor(model => model.Country)  
    </th>  
                <th></th>  
            </tr>  
    @foreach (var item in Model)  
    {  
      
            <tr>  
                <td style="padding-left: 20px;">  
    @Html.DisplayFor(modelItem => item.Name)  
    </td>  
                <td style="padding-left: 20px;">  
    @Html.DisplayFor(modelItem => item.Email)  
    </td>  
                <td style="padding-left: 50px;">  
    @Html.DisplayFor(modelItem => item.Country)  
    </td>  
            </tr>  
    }  
      
            <tr>  
                <td></td>  
                <td></td>  
                <td>  
                    <input type="submit" name="btnExportLicensing" style="width: 140px;"  
    value="Export" id="exportLicensing" class="button" />  
                </td>  
            </tr>  
        </table>  
    }

وکد های زیر را برای برقرای بانک اطلاعاتی در Web.config بنویسید

فقط این نکته را خاطر نشان کنم که اکه اطلاعات موجود در connection string  من با شما فرق  دارد.

 <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-ExportDataTableToExcelInMVC4-20150521214911;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-ExportDataTableToExcelInMVC4-20150521214911.mdf" providerName="System.Data.SqlClient" />
    <add name="RConnection" connectionString="Server=.;database=TestDB;UID=sa; pwd=123;" />
  </connectionStrings>

واگر از برنامه اجرا بگریم باتصویر زیر روبه رو میشویم

 

واگر دکمه "تبدیل" را انتخاب کنیم تمام  اطلاعات را به صورت فایل Excel تبدیل میکند.

 

فایل های ضمیمه