关于导出Excel

Asp.Net

  在刚毕业那会,作项目全是服务器控件。导出Excel的代码也很简单,在button触发后台事件后,后台生成一个excel文件,而后读取成字节,输出到客户端。html

   Response.AddHeader("Content-Disposition", "attachment; filename=test.csv"); 
   Response.ContentType = "application/ms-excel"; 
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); 
   Response.BinaryWrite(by); //Excel文件字节数组
   Response.End();

Ajax

  用ExtJS写UI,前台就没法使用任何服务器控件。同时也借此来表明纯用html控件来实现的页面,交互一般使用Ajax。说说我当时的作法,用几行伪代码表示。json

$("#Excel").click(function(){
    $.post('/url',{name:"111"},function(rdto){
        if(!rdto.Result)
        {
            alert(rdto.Message || '系统出错!');
            return;
        }
        var fileName = rdto.data;
        //打开新页面去下载文件
        window.open('file.aspx?fileName'+fileName,'xxx-xx');
    });
},'json');

  思路则是,先将数据提交到后台,后台生成一个临时的Excel文件,而后将文件名返回给js,js在新开一个页面去下载Excel。这种方式,通常就会带来一个问题,新开的页面常常会被拦截,点击容许弹窗以后,浏览器又会刷新,而后再次点击导出,上次点击导出Excel临时生成的文件还在那静静的躺着。数组

IFrame来帮忙

  上面的方法太蛋疼,生成一个临时文件,有可能尚未立马删除。在用一段伪代码表示。浏览器

$("body").append("<iframe src='/home/excel?name=1'/>");

  这样就能够经过iframe发起一个get请求,后台按照asp.net的写法就能够了。服务器

  可是get请求没法传递大量数据,系统要传递大量数据怎么办。好比说,直接把某个控件的html代码,或者是页面的html代码导出在Excel里。谈谈楼主目前的想法:app

首先发起一个post请求传参,后台存到Session中去,而后再发起上面的get请求,请求中去根据这个数据来生成文件。asp.net

Form

  若是页面导出的数据来自于表单内容,能够经过form来操做,这里就很简单了,跟Asp.Net相似。form表单提交的地址,直接返回一个文件流。而form支持post和get,因此能够根据要求本身选择。post

  固然也能够window.location.href = '/home/excel?t=1&...';  后台来返回文件流。url

 

  方式不少,你们根据场景自行选择。spa

相关文章
相关标签/搜索