Export Data Into Excel in a Pre-defined Template Using StreamWriter

Exporting data into Excel is a common requirement. In this article, I will explain the exportation of data into Excel in a pre-defined Excel template.

For exporting data into a pre-defined Excel sheet, we will create an Excel sheet (as in the following) in the folder "ExcelTemplates" with the file name "Reports-ProductDetails.xls":


Create a table called Product:

CREATE TABLE [dbo].[Product](
 [product_id] [int] IDENTITY(1,1) NOT NULL,
 [product_name] [nvarchar](max) NULL,
 [product_rate] [money] NULL

Added some records:


Page design code:

 <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" />
                <asp:BoundField DataField="product_id" HeaderText="Product Id" InsertVisible="False" ReadOnly="True" SortExpression="product_id" />
                <asp:BoundField DataField="product_name" HeaderText="Product Name" SortExpression="product_name" />
                <asp:BoundField DataField="product_rate" HeaderText="Product Rate" SortExpression="product_rate" />
            <EditRowStyle BackColor="#2461BF" />
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#EFF3FB" />
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#F5F7FB" />
            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
            <SortedDescendingCellStyle BackColor="#E9EBEF" />
            <SortedDescendingHeaderStyle BackColor="#4870BE" />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" SelectCommand="SELECT * FROM [Product]"></asp:SqlDataSource>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Export to Excel" />

Now here is the code to export the data using a StreamWriter object:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public partial class ExporttoExcel : System.Web.UI.Page
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    protected void Button1_Click(object sender, EventArgs e)
        SqlCommand command = new SqlCommand();
        command.CommandText = "SELECT * FROM Product";
        command.CommandType = CommandType.Text;
        command.Connection = con;
        SqlDataAdapter da = new SqlDataAdapter(command);
        DataSet ds = new DataSet();
        da.Fill(ds, "ProductDetails");
        if (ds.Tables[0].Rows.Count < 0)
        var fpath = string.Empty;
        if (Directory.Exists(Server.MapPath("ExcelTemplates")) == false)
        fpath = Server.MapPath("ExcelTemplates/Reports-ProductDetails" + Session.SessionID + ".xls");
        if (File.Exists(fpath) == false)
        if (fpath.Trim() != string.Empty)
            DataSetToExcel(ds, fpath, "");
    void DataSetToExcel(DataSet dsExport, string path, string tableName)
        if (path == string.Empty)
        StreamWriter SWriter = new StreamWriter(path);
        string str = string.Empty;
        Int32 colspan = dsExport.Tables[0].Columns.Count;
        str += "<Table border=2><TR><TD align='center' colspan=" + Convert.ToString(colspan) + ">" + tableName + "</TD></tr>";
        str += "<tr><TD align='left' bgcolor='#D1DAA7' style='font-size:18px' colspan=" + Convert.ToString(colspan) + ">" + tableName + "Product Details</TD></tr>";
        str += "<tr></tr><tr><TD align='left' bgcolor='#D1DAA7' style='font-size:10px' colspan=" + Convert.ToString(colspan) + ">" + tableName + " Printed On  " + DateTime.Now.Date + "</TD></tr><tr></TR>";
        foreach (DataColumn DBCol in dsExport.Tables[0].Columns)
            str += "<TD bgcolor='808080'>" + DBCol.ColumnName + "</TD>";
        str += "</TR>";
        foreach (DataRow DBRow in dsExport.Tables[0].Rows)
            str += "<TR>";
            foreach (DataColumn DBCol in dsExport.Tables[0].Columns)
                str += "<TD>" + Convert.ToString(DBRow[DBCol.ColumnName]) + "</TD>";
            str += "</TR>";
        str += "</TABLE>";
        if (path.Length > 5)
    void DownloadFile(string FPath)
        String strRequest = Request.QueryString["file"];
        FileInfo file = new FileInfo(FPath);
        if (file.Exists)
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.Write("This file does not exist.");

After exporting the data into Excel, the report looks like this:

Happy coding!