javascript 实现 html 页面 table 导出 excel
在做数据导出excel的时候我们有时候需要将Table 的样式也导出在excel中。
功能说明:用js将页面上的talbe 全部 以字符的形式传到后台代码中,后台输出。
此处使用的是asp.net mvc 模式
html页面:
<script language="javascript" type="text/javascript"> $(function () { $("#btnExcel").click(function () { ExportExcelByID('cDiv','报表名'); }); }) </script> <input type="button" name="btnout" id="btnExcel" value="导出" /> <div id="cDiv"> <table id="tableview" >内容</table> </div>
js函数:
function ExportExcelByID(ReportTableID,reportname) { // alert('xxxx'); if (!$("#cDiv")) { alert("请先确定导出内容!"); return false; } var exportvalue = $("#cDiv").html(); exportvalue = exportvalue.replace(/\ /g, ""); exportvalue = escape(exportvalue); var ExportForm = document.createElement("FORM"); document.body.appendChild(ExportForm); ExportForm.method = "POST"; //var newElement = document.createElement("<input name='exportvalue' type='hidden' id='exportvalue'>"); //上面的写法firefox不兼容,下面的写法可以兼容firefox var newElement = document.createElement("input"); newElement.setAttribute("name", "exportvalue"); newElement.setAttribute("type", "hidden"); ExportForm.appendChild(newElement); newElement.value = exportvalue; ExportForm.action = "/Report/ToExcel/"+reportname;//提交到后台的一个页面ToExcel.aspx页面 ExportForm.target = "_blank"; ExportForm.submit(); }
ToExcel 后台代码:
public ActionResult ToExcel(string id) { string exportvalue =Request["exportvalue"]; //xyq 2007.12.4 负数导出到excel后不能运算 // exportvalue = exportvalue.Replace("-", "—"); //去掉一些不要显示的字符串 //exportvalue = Remove(exportvalue, "DISPLAY: none"); /* exportvalue = Remove(exportvalue, "<SPAN style=\"DISPLAY: none", "</SPAN>"); exportvalue = Remove(exportvalue, "<TD style=\"DISPLAY: none", "</TD>"); exportvalue = Remove(exportvalue, "<TH style=\"DISPLAY: none", "</TH>"); */ exportvalue = Microsoft.JScript.GlobalObject.unescape(Server.HtmlDecode(exportvalue)); exportvalue = exportvalue.Replace("?", ""); exportvalue = exportvalue.Replace(" ", ""); exportvalue = exportvalue.Replace("<TABLE", "<TABLE border=\"1\" bordercolor=\"#000000\""); exportvalue = exportvalue.Replace("<table", "<table border=\"1\" "); exportvalue = exportvalue.Replace("border=0", "border=1 "); exportvalue = exportvalue.Replace("border='0'", "border=1 "); exportvalue = exportvalue.Replace("border=\"0\"", "border=1 "); exportvalue = exportvalue.Replace("STYLE", "stylefrom "); exportvalue = exportvalue.Replace("<TD><SPAN></SPAN></TD>", " "); exportvalue = exportvalue.Replace("<td>", " <td style=\"vnd.ms-excel.numberformat:@\">"); exportvalue = exportvalue.Replace("<TD>", " <td style=\"vnd.ms-excel.numberformat:@\">"); exportvalue = exportvalue.Replace("<A ", "<SPAN "); exportvalue = exportvalue.Replace("</A>", "</SPAN>"); exportvalue = exportvalue.Replace("<IMG ", "<IMG1 "); exportvalue = exportvalue.Replace("type=image ", "type=image1 "); Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; //this.EnableViewState = false; //xyq 2007.12.4 Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AddHeader("Content-Disposition", "attachment;filename="+id+".xls"); StringWriter sw = new StringWriter(); //sw.WriteLine("javascript:unescape('" +exportvalue+"');"); sw.WriteLine(exportvalue); HtmlTextWriter htmlWriter = new HtmlTextWriter(sw); Control cr = new Control(); cr.RenderControl(htmlWriter); //强制输出bom 这样避免excel打开时乱码 Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF }); Response.Write(sw.ToString()); Response.End(); return View(); }
生如夏花之灿烂