<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導(dǎo)出為Excel

    Asp.net中把DataTable或DataGrid導(dǎo)出為Excel


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

    內(nèi)容: 
    服務(wù)器端實(shí)現(xiàn)DataGrid導(dǎo)出為excel 
    客戶端實(shí)現(xiàn)DataGrid導(dǎo)出為excel 
    服務(wù)器端實(shí)現(xiàn)DataTable導(dǎo)出為excel(終極解決方案) 


     

    服務(wù)器端實(shí)現(xiàn)DataGrid導(dǎo)出為excel 

    這是網(wǎng)上出現(xiàn)的最多的做法:

     1/// <summary> 
     2        /// 把DataGrid內(nèi)容導(dǎo)出偉excel并返回客戶端 
     3        /// </summary> 
     4        /// <param name="dgData">待導(dǎo)出的DataGrid</param> 
     5        /// 創(chuàng) 建 人:calvin 
     6        /// 創(chuàng)建日期:2005年10月08日 
     7        /// 修 改 人: 
     8        /// 修改日期: 
     
     9        public static void DataGrid2Excel(System.Web.UI.WebControls.DataGrid dgData) 
    10        
    11            // 當(dāng)前對話 
    12            System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
    13            // IO用于導(dǎo)出并返回excel文件 
    14            System.IO.StringWriter strWriter = null
    15            System.Web.UI.HtmlTextWriter htmlWriter = null
    16 
    17            if (dgData != null
    18            
    19                // 設(shè)置編碼和附件格式 
    20                curContext.Response.ContentType = "application/vnd.ms-excel"
    21                curContext.Response.ContentEncoding =System.Text.Encoding.UTF8; 
    22                curContext.Response.Charset = ""
    23                 
    24                // 導(dǎo)出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        }

    在需要導(dǎo)出的地方調(diào)用上面的方法就可以。不過這樣的實(shí)現(xiàn)有兩個(gè)問題:第一,datagrid中不能包含模板列;第二,只能夠?qū)С霎?dāng)前顯示在datagrid的數(shù)據(jù),無法在分頁的情況下導(dǎo)出全部的查詢結(jié)果。 

    如果大家分析一下Control.RenderControl的方法,就會(huì)發(fā)現(xiàn)RenderControl只是把控件的innerHTML導(dǎo)出來,既然如此,完全可以把導(dǎo)出操作放在客戶端來處理。 



    客戶端導(dǎo)出excel 

     1 /* 
     2 * 將DataGrid導(dǎo)出為Excel文件 
     3 
     4 * @param strTitle    文件標(biāo)題 
     5 * @param dgData        待導(dǎo)出的DataGrid 
     6 * @param iStartCol    起始列序號(hào) 
     7 * @param iEndCol    結(jié)束列序號(hào) 
     8 
     9 * 創(chuàng)建人:    calvin 
    10 * 創(chuàng)建日期: 2005-10-08 
    11 * 修改人:     
    12 * 修改日期: 
    13 **/ 
    14  function DataGrid2Excel(strTitle, dgData, iStartCol, iEndCol) 
    15 
    16     // 定義Excel Applicaiton Object 
    17     var appExcel = null
    18     // 當(dāng)前激活的工作簿 
    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     // 獲取當(dāng)前激活的工作部 
    36     currentWork = appExcel.Workbooks.Add(); 
    37     currentSheet = currentWork.ActiveSheet; 
    38  
    39     // 填充excel內(nèi)容 
    40     // 設(shè)置標(biāo)題 
    41     currentSheet.Cells(1,1).Value = strTitle; 
    42     currentSheet.Cells(1,1).Value = dgData.innerText; 
    43     window.alert(dgData.innerHTML); 
    44  
    45     // 填充內(nèi)容 
    46     for (var iRow = 0; iRow < dgData.rows.length - 1; iRow++
    47     { 
    48         // 顯示指定列的內(nèi)容 
    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 }

    下面是調(diào)用的例子

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


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



    終極解決方案:將DataTable導(dǎo)出為excel 

    好,讓我們快點(diǎn)結(jié)束這篇無聊的post。一般來說,頁面上的datagrid是以查詢得到的一個(gè)DataTable為數(shù)據(jù)源的。那么為了把全部數(shù)據(jù)導(dǎo)入excel中,我們只要把DataTable數(shù)據(jù)源輸出為excel就可以了。 

     1/// <summary> 
     2        /// 把DataTable內(nèi)容導(dǎo)出偉excel并返回客戶端 
     3        /// </summary> 
     4        /// <param name="dgData">待導(dǎo)出的DataTable</param> 
     5        /// 創(chuàng) 建 人:陳文凱 
     6        /// 創(chuàng)建日期:2005年10月08日 
     7        /// 修 改 人: 
     8        /// 修改日期:
     
     9        public static void DataTable2Excel(System.Data.DataTable dtData) 
    10        
    11            System.Web.UI.WebControls.DataGrid dgExport = null
    12            // 當(dāng)前對話 
    13            System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
    14            // IO用于導(dǎo)出并返回excel文件 
    15            System.IO.StringWriter strWriter = null
    16            System.Web.UI.HtmlTextWriter htmlWriter = null
    17 
    18            if (dtData != null
    19            
    20                // 設(shè)置編碼和附件格式 
    21                curContext.Response.ContentType = "application/vnd.ms-excel"
    22                curContext.Response.ContentEncoding =System.Text.Encoding.UTF8; 
    23                curContext.Response.Charset = ""
    24                 
    25                // 導(dǎo)出excel文件 
    26                strWriter = new System.IO.StringWriter(); 
    27                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); 
    28 
    29                // 為了解決dgData中可能進(jìn)行了分頁的情況,需要重新定義一個(gè)無分頁的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        }


    需要注意的是,導(dǎo)出excel之前要把datatable的列名更改為客戶要求的文字,就ok了。因?yàn)槭菑腄ataTable導(dǎo)出的,所以這種方法解決了分頁數(shù)據(jù)的問題,堪稱終極解決方案。 

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


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學(xué)習(xí)

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 男女拍拍拍免费视频网站| 亚洲国产午夜中文字幕精品黄网站 | 亚洲国产精品久久66| jzzjzz免费观看大片免费| 中文在线观看免费网站| 每天更新的免费av片在线观看| 美女裸身网站免费看免费网站| 热99re久久免费视精品频软件| 浮力影院亚洲国产第一页| 久久精品九九亚洲精品| 国产精品亚洲专区无码唯爱网| 成人a毛片视频免费看| 99久久免费精品视频| 亚洲成A∨人片天堂网无码| 亚洲资源在线观看| 中国人xxxxx69免费视频| 国产v片免费播放| 猫咪免费观看人成网站在线| 亚欧免费视频一区二区三区| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久亚洲精品无码蜜桃| 免费无码专区毛片高潮喷水| 国产在线观看片a免费观看| 色噜噜亚洲精品中文字幕| 亚洲人成7777| 国产性生交xxxxx免费| 亚洲精品午夜久久久伊人| 一个人看的免费高清视频日本| 国产无人区码卡二卡三卡免费 | 亚洲AV无码精品无码麻豆| 国产成人人综合亚洲欧美丁香花| 久久国产精品免费看| 国产成人亚洲影院在线观看| 亚洲日本人成中文字幕| 日韩精品在线免费观看| 在线亚洲精品自拍| 免费成人激情视频| 国产一区二区三区亚洲综合 | 卡1卡2卡3卡4卡5免费视频 | 最新国产精品亚洲| 又黄又大又爽免费视频|