您的位置:首页 > Web前端 > HTML

服务器端直接将HTML下载成Excel

2017-04-27 13:40 323 查看

今天,有一个功能需要,需要将网页的数据表格下载成Excel。之前没有做过这样的需求。然后在网上摆渡了一下,网上的方案有很多种

通过使用Ajax获取Html

将标签变为服务器端控件,通过InnerHtml的方式获取。

还有其他方式参考

个人觉得第一中太繁琐,我只是想获取个HTML而已,干嘛还给我搞个Ajax 出来,那么我就索性使用了第二种方案。将标签加上runat=“server”,通过属性来获取里面包含的html。

代码如下:

前段代码:
<div class="container-fluid " runat="server" id="DivAll">

后端代码:
string dd= this.DivAll.InnerHtml;


这样貌似没有什么问题,结果一运行,大跌我眼镜!出现了煞白煞白的错误提示。



于是乎,有使用了万事都能解决的摆渡,在上面寻找答案,真希望百度,哪天能帮我摆渡一下。花费我洪荒之力,终于找到了解决方案,不过说实在的这解决方案还要研究一下,不知道为什么还有一个套一个使用!

System.Text.StringBuilder strb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(strb);
System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
this.DivAll.RenderControl(htw);


这样在后台代码中就可以直接使用前台的Div中的html代码啦。只需要将strb.ToString();

那么下一步就是将Html放在后台中直接下载出来。那问题又来了,下载方法不会写呀!我艹又要上摆渡,真是够够的啦!

Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition",
"attachment; filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
Response.Write("<head>");
Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
string fileCss = Server.MapPath("../css/bootstrap.css");
string cssText = string.Empty;
StreamReader sr = new StreamReader(fileCss);
var line = string.Empty;
while ((line = sr.ReadLine()) != null)
{
cssText += line;
}
sr.Close();
Response.Write("<style>" + cssText + "</style>");
Response.Write("<!--[if gte mso 9]><xml>");
Response.Write("<x:ExcelWorkbook>");
Response.Write("<x:ExcelWorksheets>");
Response.Write("<x:ExcelWorksheet>");
Response.Write("<x:Name>Report Data</x:Name>");
Response.Write("<x:WorksheetOptions>");
Response.Write("<x:Print>");
Response.Write("<x:ValidPrinterInfo/>");
Response.Write("</x:Print>");
Response.Write("</x:WorksheetOptions>");
Response.Write("</x:ExcelWorksheet>");
Response.Write("</x:ExcelWorksheets>");
Response.Write("</x:ExcelWorkbook>");
Response.Write("</xml>");
Response.Write("<![endif]--> ");
Response.Write(html);//HTML
Response.Flush();
Response.End();


听说将这段代码中的.xls换成doc可以直接下载成Word格式!

号外号外,在这段代码中还可以神奇的加入Css文件。真是够流弊的!

好啦,不写啦,直接贴上整段代码

 protected void DownExcel_Click(object sender, EventArgs e)
{
try
{
System.Text.StringBuilder strb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(strb);
System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter(sw);
//前段div的id
this.DivAll.RenderControl(htw);

string html = strb.ToString();
htw.Close();
sw.Close();
Response.ContentType = "application/force-download"; Response.AddHeader("content-disposition", "attachment; filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"); Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); Response.Write("<head>"); Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); string fileCss = Server.MapPath("../css/bootstrap.css"); string cssText = string.Empty; StreamReader sr = new StreamReader(fileCss); var line = string.Empty; while ((line = sr.ReadLine()) != null) { cssText += line; } sr.Close(); Response.Write("<style>" + cssText + "</style>"); Response.Write("<!--[if gte mso 9]><xml>"); Response.Write("<x:ExcelWorkbook>"); Response.Write("<x:ExcelWorksheets>"); Response.Write("<x:ExcelWorksheet>"); Response.Write("<x:Name>Report Data</x:Name>"); Response.Write("<x:WorksheetOptions>"); Response.Write("<x:Print>"); Response.Write("<x:ValidPrinterInfo/>"); Response.Write("</x:Print>"); Response.Write("</x:WorksheetOptions>"); Response.Write("</x:ExcelWorksheet>"); Response.Write("</x:ExcelWorksheets>"); Response.Write("</x:ExcelWorkbook>"); Response.Write("</xml>"); Response.Write("<![endif]--> "); Response.Write(html);//HTML Response.Flush(); Response.End();

}
catch (Exception)
{

throw;
}
}


TIP:若遇到文件下载格式问题,请查看

http://blog.csdn.net/younghaiqing/article/details/70846850
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  html server