js方法 页面导出Excel文件
/*
在需要导出Excel的页面引用jquery-1.4.1.js,再引用此js,按钮调用方法为SaveAsExcel();
*/
function SaveAsExcel() {
/*替换文本框*/
此方法有两部分组成,javascript和后台ashx一般处理程序。
如果只是导出页面上的内容,js方法就可以搞定了,如果页面上引用了css文件的话,就要用到下面的ashx方法了,这个方法返回的是css链接文件的服务器地址,
然后js将css文件内容读在页面上,将样式也带出来。
javascript代码:
/* 在需要导出Excel的页面引用jquery-1.4.1.js,再引用此js,按钮调用方法为SaveAsExcel(); 将ie浏览器的active禁用项启用; 将ExportExcel.ashx文件放在与css文件夹同级目录中。 */ function SaveAsExcel() { /*获取css地址*/ var csshref, ts, css; var ForReading = 1; var abspath = document.getElementsByTagName("link"); //alert(abspath.length); if (abspath.length > 0) { checkcss(abspath); /*检测css文件引用*/ function checkcss(path) { for (var i = 0; i < path.length; i++) { csshref = path[i].getAttribute("href", 2); csshref = csshref.replace("../", "./"); var filepath; getabspath(csshref); function getabspath(csshref) { $.ajax({ type: "post", url: "../ExportExcel.ashx?act=path", data: { pathxd: csshref }, success: function (data) { //alert(data); filepath = data; } }); /*读取css内容*/ var fso = new ActiveXObject("Scripting.FileSystemObject"); ts = fso.OpenTextFile(filepath, ForReading); css += ts.ReadAll(); } } } } /*替换文本框*/ ReplaceText(); function ReplaceText() { $("input").each(function () { if ($(this).attr("type") == "text") { var txt = $(this).val(); var txtc = $("<span>" + txt + "</span>"); $(this).replaceWith(txtc); } }); } /*替换文本域*/ ReplaceTextArea(); function ReplaceTextArea() { var textarea = document.getElementsByTagName("textarea"); for (var i = 0; i < textarea.length; i++) { var area = $(textarea[i]).val(); var areac = $("<span>" + area + "</span>"); $(textarea[i]).replaceWith(areac); } } /*检查文本域是否替换完*/ CheckElseTextArea(); function CheckElseTextArea() { var textarea = document.getElementsByTagName("textarea"); if (textarea.length > 0) { for (var num = 0; num < textarea.length; num++) { ReplaceTextArea(); CheckElseTextArea(); } } else { //alert("文本域替换完成"); } } /*替换单选按钮*/ ReplaceRadio(); function ReplaceRadio() { var radio = $("input[type=\'radio\']"); for (var i = 0; i < radio.length; i++) { if (radio[i].checked) { var rad = $(radio[i]).next("span").text(); $(radio[i]).next("span").empty(); var radc = $("<span>" + rad + "</span>"); $(radio[i]).replaceWith(radc); } else { var radnot = $(radio[i]).next("span").text(); if (radnot != null && radnot != "") { $(radio[i]).next("span").empty(); //清空span的值,否则导出到excel中还是会显示的; } var radc = $("<span></span>"); $(radio[i]).replaceWith(radc); } } } /*替换多选按钮*/ ReplaceCheckbox(); function ReplaceCheckbox() { var check = $("input[type=\'checkbox\']"); for (var i = 0; i < check.length; i++) { if (check[i].checked) { var che = $(check[i]).next("span").text(); $(check[i]).next("span").empty(); var chec = $("<span>" + che + "</span>"); $(check[i]).replaceWith(chec); } else { var che = $(check[i]).next("span").text(); if (che != "" || che != null) { $(check[i]).next("span").empty(); } var chec = $("<span></span>"); $(check[i]).replaceWith(chec); } } } /*替换下拉框*/ ReplaceSelect(); function ReplaceSelect() { var select = document.getElementsByTagName("select"); for (var i = 0; i < select.length; i++) { var val = $(select[i]).find(\'option:selected\').text(); //alert("第" + (i + 1) + "个下拉框:" + val); var valr = $("<span>" + val + "</span>"); $(select[i]).replaceWith(valr); } } /*图片*/ ShowImg(); function ShowImg() { var img = document.getElementsByTagName("img"); for (var i = 0; i < img.length; i++) { var url = img[i].src; img[i].src = url; } } /*检查下拉框是否替换完*/ CheckElseSelect(); function CheckElseSelect() { var selectelse = document.getElementsByTagName("select"); if (selectelse.length > 0) { for (var num = 0; num < selectelse.length; num++) { //alert("这是第" + num + "次检查"); ReplaceSelect(); CheckElseSelect(); } } else { //alert("所有下拉框已替换完!"); } } /*隐藏按钮*/ HideButton(); function HideButton() { var btn = $("input[type=\'button\']"); for (var i = 0; i < btn.length; i++) { $(btn[i]).hide(); } } /*显示按钮*/ function ShowButton() { var btn = $("input[type=\'button\']"); for (var i = 0; i < btn.length; i++) { $(btn[i]).show(); } } /*将内容输出,保存为Excel文件*/ ExportExcel(); function ExportExcel() { var s = "<html><head><style>" + css + "</style></head><body>" + document.body.innerHTML + "</body></html>"; var xlsWindow = window.open("", "_blank", "width=1,height=1,scrollbars=no,toolbar=no"); xlsWindow.document.write(s); xlsWindow.document.close(); var resault = xlsWindow.document.execCommand(\'Saveas\', true, \'%homeDrive%\\未命名.xls\'); xlsWindow.close(); if (resault == true) { //set alert("导出Excel成功!"); window.location.href = "Javascript:history.go()"; } else { alert("导出失败!"); ShowButton(); } } }
ashx代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; namespace QMTest { /// <summary> /// ExportExcel 的摘要说明 /// </summary> public class ExportExcel : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string at = ""; if (context.Request["act"] != null) { at = context.Request["act"].ToString(); } string strpath = @context.Request.Form["pathxd"].ToString(); switch (at) { case "path": getpath(context, strpath); break; } } public void getpath(HttpContext context, string path) { string newPath = HttpContext.Current.Server.MapPath(path); context.Response.Write(newPath); } public bool IsReusable { get { return false; } } } }