需求:前台点击某个按钮,在后台从数据库中获取某DataTable数据到处成Excel文件。

1.Asp按钮控件

  两个按钮,分别调用两种导出Excel文件的后台方法。

<%--第一种方法--%>
    <form id="form1" runat="server">
        <div>
            <asp:Button runat="server" OnClick="Btn1_Click" ID="Btn1" Text="Asp控件按钮导出Excel1" Width="200px" />
            <asp:Button runat="server" OnClick="Btn12_Click" ID="Btn12" Text="Asp控件按钮导出Excel2" Width="200px" />
        </div>
    </form>

2.后台事件

protected void Btn1_Click(object sender, EventArgs e)
{
    ExportToExcel1(GetDT(), "BTN1_名单");
}
protected void Btn12_Click(object sender, EventArgs e)
{
    ExportToExcel2(GetDT(), "BTN12_名单");
}

  模拟数据库获取DataTable。

DataTable GetDT()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("排名", typeof(int));
    DataColumn dc1 = new DataColumn("歌手", typeof(string));
    dt.Columns.Add(dc1);
    DataRow dr1 = dt.NewRow();
    dr1["排名"] = 1; dr1["歌手"] = "周杰伦";
    DataRow dr2 = dt.NewRow();
    dr2["排名"] = 2; dr2["歌手"] = "陈奕迅";
    dt.Rows.Add(dr1); dt.Rows.Add(dr2);
    return dt;
}

  下面贴出的两个导Excel的方法,其中一个是DataTable数据绑定到Web控件(DataGrid)中,将控件中的数据写入HtmlTextWriter对象中,在输出到Excel文件;另一种是直接将DataTable每行的DataRow中的Cell数据写入Excel。两种方法最后在Excel文件中内容的呈现格式会略有不同。

        /// <summary>
        /// DataTable中的数据导出到Excel并下载
        /// DataTable绑定到Web控件,读取控件里的数据写入Excel
        /// </summary>
        /// <param name="dt">要导出的DataTable</param>
        /// <param name="fileName">Excel的文件名</param>
        public void ExportToExcel1(DataTable dt, string fileName)
        {
            //将DataTable绑定到DataGird控件
            System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
            dg.DataSource = dt.DefaultView;
            dg.AllowPaging = false;
            dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray;
            dg.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
            dg.HeaderStyle.Font.Bold = true;
            dg.DataBind();
            Response.Clear();
            Response.Buffer = true;

            //防止出现乱码,加上这行可以防止在只有一行数据时出现乱码
            Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName + ".xls", System.Text.Encoding.UTF8));
            Response.ContentType = "application/ms-excel";

            Response.Charset = "UTF-8";
            //指定编码 防止中文乱码现象
            Response.ContentEncoding = System.Text.Encoding.UTF8;

            //关闭控件的视图状态
            this.EnableViewState = false;

            //初始化HtmlWriter
            System.IO.StringWriter writer = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
            //将DataGird内容输出到HtmlTextWriter对象中
            dg.RenderControl(htmlWriter);
            string outputStr = writer.ToString();
            //输出
            Response.Write(outputStr);
            Response.Flush();
            Response.End();
        }
ExportToExcel1

相关文章: