如何使用asp.net C#将Html表格下载到excel文件

我有一个Html表格:

<table cellpadding="0" cellspacing="0" border="0" class="Messages" id="idTbl" runat="server"> <tr> <th>date</th> <th>Subject</th> </tr> <tr class="myHot_smsMessages_new"> <td>01/01/2014</td> <td>Some Subject No 1</td> </tr> <tr class="myHot_smsMessages_new"> <td>10/12/2013</td> <td>Some subject no 2</td> </tr> </table> 

在服务器端:

 protected void ExportToXLS(object sender, EventArgs e) { Response.ContentType = "application/x-msexcel"; Response.AddHeader("Content-Disposition", "attachment; filename=ExcelFile.xls"); Response.ContentEncoding = Encoding.UTF8; StringWriter tw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); idTbl.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); } 

有任何想法吗?

 static StringBuilder StrBuilder = new StringBuilder(); protected void lnkExcel_Clicked(object sender, EventArgs e) { //ExportGrid.ExportExcel(griditem); ConfigureEmployeeExport(); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Charset = ""; HttpContext.Current.Response.ContentType = "application/msexcel"; HttpContext.Current.Response.AddHeader("Content-Disposition", "filename=ExcelFile.xls"); HttpContext.Current.Response.Write(StrBuilder); HttpContext.Current.Response.End(); HttpContext.Current.Response.Flush(); } public void ConfigureEmployeeExport() { StrBuilder.Append("<table cellpadding='0' cellspacing='0' border='0' class='Messages' id='idTbl' runat='server'><tr><th>date</th><th>Subject</th></tr><tr class='myHot_smsMessages_new'><td>01/01/2014</td><td>Some Subject No 1</td></tr><tr class='myHot_smsMessages_new'><td>10/12/2013</td><td>Some subject no 2</td></tr></table>"); } 

所以我想出了两个解决scheme,第一个是从我的页面redirect到一个通用的处理程序(发送ByteStream),并在处理程序做一些像user3851829下面的build议

我所做的是类似的,只有我从中继器获取内容,然后将其呈现到stringBuilder中,如下所示:

 protected void ExportToXLS(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=Notifications.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; using (StringWriter sw = new StringWriter()) { HtmlTextWriter tw = new HtmlTextWriter(sw); repeaterID.DataSource = Session["SomeDataFromSession"] as List<SomeObject>; repeaterID.DataBind(); rptNotifications.RenderControl(tw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); } } 

两个答案正在工作!