js方法 页面导出Excel文件

此方法有两部分组成,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;
            }
        }
    }
}

 

posted @ 2013-03-17 22:02  Jackie Hao  阅读(986)  评论(0编辑  收藏  举报