ASP.NET如何导出excel(一)

原文: 刘武| ASP.NET如何导出excel(一)

ASP.NET中导出excel的方法很多,最简单的就是利用服务器控件的RenderControl方法,他可以把服务器控件的内容作为流输出到客户端,可以用该方法输出整个页面,也可以输出单独的控件。单必须注意使用该方法时必须重载 VerifyRenderingInServerForm 函数,否则就会出错。以下是参考代码:

DEMO.ASPX:

<asp:GridView ID="gv1" runat="server" AutoGenerateColumns="false">
 <Columns>
  <asp:BoundField DataField="Name" HeaderText="Name" />
  <asp:BoundField DataField="Date" HeaderText="Date"
   DataFormatString="{0:yyyy-MM-dd}" />
  <asp:BoundField DataField="Number" HeaderText="Number"
   DataFormatString="{0:#,###.00}" />
 </Columns>
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="导出"
 OnClick="btnExport_Click" />

DEMO.ASPX.CS:

class Item
    {
        string _name;
        public string Name
        {
            set { _name = value; }
            get { return _name; }
        }


        DateTime _date;
        public DateTime Date
        {
            set { _date = value; }
            get { return _date; }
        }


        decimal _number;
        public decimal Number
        {
            set { _number = value; }
            get { return _number; }
        }
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            #region  加载数据
            IList<Item> items = new List<Item>();
            Item i = new Item();
            i.Name = "liuwu";
            i.Date = DateTime.Now;
            i.Number = 1234567;
            items.Add(i);


            i = new Item();
            i.Name = "刘武";
            i.Date = DateTime.Now.AddDays(5);
            i.Number = 234.45m;
            items.Add(i);


            gv1.DataSource = items;
            gv1.DataBind();
            #endregion
        }
    }


    /// <summary>
    /// 导出excel
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnExport_Click(object sender, EventArgs e)
    {
        Response.AddHeader("Content-Disposition", "attachment;filename=" +
            HttpUtility.UrlEncode(DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls",
                System.Text.Encoding.UTF8));
        Response.ContentEncoding = System.Text.Encoding.Default;
        Response.ContentType = "application/ms-excel";
        System.IO.StringWriter sw = new System.IO.StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        gv1.RenderControl(hw);
        Response.Write(sw.ToString());
        Response.End();
    }


    /// <summary>
    /// 必须重载该函数为空
    /// </summary>
    /// <param name="control"></param>
    public override void VerifyRenderingInServerForm(Control control)
    {
    }

用该方法导出的文件,如果我们用记事本打开就会发现其实也是标准的html代码,但是excel能够正常的识别,如果只是一般的用途也足够了,而且也不需要在服务器端配置excel的相关组件,一般用于轻量级的应用。

其实我们只要稍微修改一下代码,就可以将其导出为word文档,原理同导出excel一样,只能怪word和excel一样这么智能,均能识别html格式的文档了,以下是具体代码:

Response.AddHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(DateTime.Now.ToString("yyyyMMddHHmmss") + ".doc",
 System.Text.Encoding.UTF8));
Response.ContentEncoding = System.Text.Encoding.Default;
Response.ContentType = "application/ms-word";
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
gv1.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();

你可能感兴趣的:(asp.net)