[英]How to download an Html table into excel file using asp.net C#
I have an Html table as such: 我有这样的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>
and on the server side: 在服务器端:
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();
}
Any ideas? 有任何想法吗?
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>");
}
So I figured out two solutions, the first one is redirecting from my page to a generic handler (send the ByteStream) and in the handler do something like user3851829 suggested below 所以我想出了两个解决方案,第一个解决方案是从页面重定向到通用处理程序(发送ByteStream),并在处理程序中执行以下建议的类似于user3851829的操作
What I did was something similar, only I took the content from a repeater and then rendered it into the stringBuilder as such: 我所做的是类似的事情,只是我从中继器中获取了内容,然后将其呈现到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();
}
}
Both answers are working ! 这两个答案都有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.