Export Data Table To Excel in ASP.Net MVC 4

This article shows how to export a Data Table to Excel in ASP.NET MVC.

The following is my Data Table in design mode.

Design Mode

Image 1. Design Mode

Script Of Employee Table

CREATE TABLE [dbo].[Employee] (
    [ID] [int] IDENTITY(1,1) NOT NULL,
      NULL,
      NULL,
      NULL
) ON [PRIMARY]
GO

Data in Employee Table

Employee Table

Image 2. Employee Table

Now open Visual Studio 2012, then select New -> Project.

 New Project

Image 3. New Project

MVC

Image 4. New ASP.Net MVC

Now add a ClosedXML reference.

Data Table

Image 5. Export Data Table

Now right-click on the Model folder, then select Add New Class. ExportDataTableToExcelModel.cs.

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;
        }
    }
}

Now right-click on the Controller Folder, then select Add -> Controller.

Controller

Image 6. Controller

Add Controller

Image 7. Add Controller

Now here in ExportDataController, add the following code.

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();
            }
        }
    }
}

Now right-click on the Index Folder, then select Add View.

Add View

Image 8. Add View

View. cshtml

@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>
}

The following is my connection string in Web.config.

<connectionStrings>
    <add name="RConnection" connectionString="Server=INDIA\MSSQLServer2k8;database=TestDB;UID=sa;pwd=india;" />
</connectionStrings>

Now, run your application.

Excel

Image 9. Excel In MVC4

Export Data

Image 10. Export DataTable to Excel

Employee Report

Image 11. Employee Report


Similar Articles