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();
浙公网安备 33010602011771号