關於導出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

相關文章
相關標籤/搜索