<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hopes

    Start Here..

     

    Asp.net中把DataTable或DataGrid導出為Excel

    Asp.net中把DataTable或DataGrid導出為Excel


    當前編碼的一個項目中有把查詢結果(顯示在DataGrid)導出為excel的需求,嘗試了幾種方法,作為技巧拿來和大家分享。 

    內容: 
    服務器端實現DataGrid導出為excel 
    客戶端實現DataGrid導出為excel 
    服務器端實現DataTable導出為excel(終極解決方案) 


     

    服務器端實現DataGrid導出為excel 

    這是網上出現的最多的做法:

     1/// <summary> 
     2        /// 把DataGrid內容導出偉excel并返回客戶端 
     3        /// </summary> 
     4        /// <param name="dgData">待導出的DataGrid</param> 
     5        /// 創 建 人:calvin 
     6        /// 創建日期:2005年10月08日 
     7        /// 修 改 人: 
     8        /// 修改日期: 
     
     9        public static void DataGrid2Excel(System.Web.UI.WebControls.DataGrid dgData) 
    10        
    11            // 當前對話 
    12            System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
    13            // IO用于導出并返回excel文件 
    14            System.IO.StringWriter strWriter = null
    15            System.Web.UI.HtmlTextWriter htmlWriter = null
    16 
    17            if (dgData != null
    18            
    19                // 設置編碼和附件格式 
    20                curContext.Response.ContentType = "application/vnd.ms-excel"
    21                curContext.Response.ContentEncoding =System.Text.Encoding.UTF8; 
    22                curContext.Response.Charset = ""
    23                 
    24                // 導出excel文件 
    25                strWriter = new System.IO.StringWriter(); 
    26                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); 
    27 
    28                // 返回客戶端     
    29                dgData.RenderControl(htmlWriter);     
    30                curContext.Response.Write(strWriter.ToString()); 
    31                curContext.Response.End(); 
    32            }
     
    33        }

    在需要導出的地方調用上面的方法就可以。不過這樣的實現有兩個問題:第一,datagrid中不能包含模板列;第二,只能夠導出當前顯示在datagrid的數據,無法在分頁的情況下導出全部的查詢結果。 

    如果大家分析一下Control.RenderControl的方法,就會發現RenderControl只是把控件的innerHTML導出來,既然如此,完全可以把導出操作放在客戶端來處理。 



    客戶端導出excel 

     1 /* 
     2 * 將DataGrid導出為Excel文件 
     3 
     4 * @param strTitle    文件標題 
     5 * @param dgData        待導出的DataGrid 
     6 * @param iStartCol    起始列序號 
     7 * @param iEndCol    結束列序號 
     8 
     9 * 創建人:    calvin 
    10 * 創建日期: 2005-10-08 
    11 * 修改人:     
    12 * 修改日期: 
    13 **/ 
    14  function DataGrid2Excel(strTitle, dgData, iStartCol, iEndCol) 
    15 
    16     // 定義Excel Applicaiton Object 
    17     var appExcel = null
    18     // 當前激活的工作簿 
    19     var currentWork = null
    20     var currentSheet = null
    21      
    22     try 
    23     { 
    24         // 初始化application 
    25         appExcel = new ActiveXObject("Excel.Application"); 
    26         appExcel.Visible = true
    27     } 
    28     catch(e) 
    29     { 
    30         window.alert("Please Install Excel First"); 
    31          
    32         return
    33     } 
    34      
    35     // 獲取當前激活的工作部 
    36     currentWork = appExcel.Workbooks.Add(); 
    37     currentSheet = currentWork.ActiveSheet; 
    38  
    39     // 填充excel內容 
    40     // 設置標題 
    41     currentSheet.Cells(1,1).Value = strTitle; 
    42     currentSheet.Cells(1,1).Value = dgData.innerText; 
    43     window.alert(dgData.innerHTML); 
    44  
    45     // 填充內容 
    46     for (var iRow = 0; iRow < dgData.rows.length - 1; iRow++
    47     { 
    48         // 顯示指定列的內容 
    49         for (var iCol = iStartCol; iCol <= iEndCol; iCol++
    50         { 
    51             currentSheet.Cells(iRow + 2, iCol + 1).Value =  
    52                 dgData.rows[iRow].cells[iCol].innerText; 
    53         } 
    54     } 
    55 }

    下面是調用的例子

    1 /*
    2 * 導出dgData中0-3列的數據到excel文件中 
    3 **/ 
    4 function ToExcel() 
    5 
    6     DataGrid2Excel("使用javascript導出excel的例子", document.getElementsById("dgData"), 03); 
    7 }


    這種方法的缺點是: 
    (1)了能夠在客戶端調用Excel.Application,需要把IE的安全級別設為“低”。 
    (2)與方法一相同,還是只能導出當前顯示在datagrid里面的數據,無法導出分頁的數據。 



    終極解決方案:將DataTable導出為excel 

    好,讓我們快點結束這篇無聊的post。一般來說,頁面上的datagrid是以查詢得到的一個DataTable為數據源的。那么為了把全部數據導入excel中,我們只要把DataTable數據源輸出為excel就可以了。 

     1/// <summary> 
     2        /// 把DataTable內容導出偉excel并返回客戶端 
     3        /// </summary> 
     4        /// <param name="dgData">待導出的DataTable</param> 
     5        /// 創 建 人:陳文凱 
     6        /// 創建日期:2005年10月08日 
     7        /// 修 改 人: 
     8        /// 修改日期:
     
     9        public static void DataTable2Excel(System.Data.DataTable dtData) 
    10        
    11            System.Web.UI.WebControls.DataGrid dgExport = null
    12            // 當前對話 
    13            System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
    14            // IO用于導出并返回excel文件 
    15            System.IO.StringWriter strWriter = null
    16            System.Web.UI.HtmlTextWriter htmlWriter = null
    17 
    18            if (dtData != null
    19            
    20                // 設置編碼和附件格式 
    21                curContext.Response.ContentType = "application/vnd.ms-excel"
    22                curContext.Response.ContentEncoding =System.Text.Encoding.UTF8; 
    23                curContext.Response.Charset = ""
    24                 
    25                // 導出excel文件 
    26                strWriter = new System.IO.StringWriter(); 
    27                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); 
    28 
    29                // 為了解決dgData中可能進行了分頁的情況,需要重新定義一個無分頁的DataGrid 
    30                dgExport = new System.Web.UI.WebControls.DataGrid(); 
    31                dgExport.DataSource = dtData.DefaultView; 
    32                dgExport.AllowPaging = false
    33                dgExport.DataBind(); 
    34 
    35                // 返回客戶端 
    36                dgExport.RenderControl(htmlWriter);     
    37                curContext.Response.Write(strWriter.ToString()); 
    38                curContext.Response.End(); 
    39            }
     
    40        }


    需要注意的是,導出excel之前要把datatable的列名更改為客戶要求的文字,就ok了。因為是從DataTable導出的,所以這種方法解決了分頁數據的問題,堪稱終極解決方案。 

    posted on 2012-08-29 09:57 ** 閱讀(404) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學習

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日本视频在线观看| 特级aaaaaaaaa毛片免费视频| 国产亚洲精AA在线观看SEE| 亚洲国产精品视频| 亚洲国产小视频精品久久久三级| 国产乱子影视频上线免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲欧洲精品视频在线观看| 亚洲综合国产精品| 亚洲精品乱码久久久久久下载| 亚洲欧洲日产韩国在线| 亚洲国产成人精品无码区在线秒播| 亚洲一级黄色大片| 久久精品亚洲福利| 国产亚洲av片在线观看播放 | 全免费a级毛片免费**视频| 妞干网手机免费视频| 无码国模国产在线观看免费| 免费人成在线观看视频播放| 自拍偷自拍亚洲精品情侣| 久久精品国产精品亚洲蜜月| 亚洲精品成人图区| 亚洲欧美成人av在线观看| 免费无码AV一区二区| 中文字幕在线观看亚洲日韩| 亚洲av永久无码| 一区二区在线免费视频| 久久伊人免费视频| 免费国产成人高清在线观看网站| 先锋影音资源片午夜在线观看视频免费播放| 无码国产精品一区二区免费vr | 最好免费观看高清在线 | 国产裸体美女永久免费无遮挡| 一个人免费视频观看在线www| 亚洲性色精品一区二区在线| 香蕉视频亚洲一级| a毛片在线还看免费网站| 亚欧国产一级在线免费| 国产精品自拍亚洲| 在线观看肉片AV网站免费| 免费看黄视频网站|