Ext.Net之 GridPanel - Excel導出方法實現


  Ext.net官網上有Excel導出的方法,在Version1.5和目前最新的Version2.0版本上都有該方法。但是都沒有列頭……下面介紹的方法也是在網上找的。

別問我為什么不放一個原著的URL。那個家伙自己也是轉的,就這樣轉啊轉。到我這我都不曉得那個是原作者了……關鍵它幫助了我,在這整理下,留個腳印。

 

代碼:

public void ToExcel(GridPanel gp, string fileName, DataTable dt, HttpResponse resp)
        {
            resp.Clear();
            resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
            resp.ContentType = "application nd.ms-excel";
            string colHeaders = "", ls_item = "";
            int i = 0;
            int cl = gp.ColumnModel.Columns.Count;
            string columns = ""; 
            //輸出表頭  取得數據表各列標題,各標題之間以t分割,最后一個列標題后加回車符 
            for (i = 0; i < cl; i++)
            {
                if (i == (cl - 1))//最后一列,加n
                {
                    if (!gp.ColumnModel.Columns[i].Hidden)
                    {
                        colHeaders += gp.ColumnModel.Columns[i].Header;
                        columns += gp.ColumnModel.Columns[i].DataIndex + ",";
                    }
                    colHeaders += "\n";
                }
                else
                {
                    if (!gp.ColumnModel.Columns[i].Hidden && gp.ColumnModel.Columns[i].ColumnID != "update")
                    {
                        colHeaders += gp.ColumnModel.Columns[i].Header + "\t";
                        columns += gp.ColumnModel.Columns[i].DataIndex + ",";
                    }
                }
            }
            resp.Write(colHeaders);
            if (columns != "") columns = columns.Substring(0, columns.LastIndexOf(","));
            string[] columnall = columns.Split(',');
            cl = columnall.Length;
            //逐行處理數據   
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                //當前行數據寫入HTTP輸出流,並且置空ls_item以便下行數據     
                for (i = 0; i < cl; i++)
                {
                    if (i == (cl - 1))
                    {
                        ls_item += EditString(dt.Rows[j][columnall[i].ToString()].ToString()) + "\n";
                    }
                    else
                    {
                        ls_item += EditString(dt.Rows[j][columnall[i].ToString()].ToString()) + "\t";
                    }
                }
                resp.Write(ls_item);
                ls_item = "";
            }
            Response.Flush();
            resp.End();
        }
        /// <summary>
        /// 處理字符問題
        /// </summary>
        /// <param name="text1"></param>
        /// <returns></returns>
        private static string EditString(string text1)
        {
            if (text1.IndexOf('\r') != -1)
            {
                text1 = text1.Replace('\r', ' ');
            }
            if (text1.IndexOf('\n') != -1)
            {
                text1 = text1.Replace('\n', ' ');
            }
            if (text1.IndexOf('\t') != -1)
            {
                text1 = text1.Replace('\t', ' ');
            }
            if (text1.IndexOf("'") != -1)
            {
                text1 = text1.Replace("'", "");
            }
            if (text1.IndexOf(@"""") != -1)
            {
                text1 = text1.Replace(@"""", "");
            }
            return text1;
        }

導出按鈕

 /// <summary>
        /// 導出Excel
        /// </summary> 
        protected void ToExcel(object sender, EventArgs e) 
        { 
            DataTable dtSource = _createPageManager.GetTrackBillData(mouldId, 2, "", 1, Cache); 
            ToExcel(gpExec, "test", dtSource, Response);  
        }

 

前台代碼

 <ext:Button ID="btnExportExcel" AutoPostBack="true" OnClick="ToExcel"   runat="server" Text="導出Excel"> 
                                                                                <Listeners>
                                                                                    <Click Fn="saveData" />
                                                                                </Listeners>
                                                                            </ext:Button>

注意: AutoPostBack="true" 別忘了,否則你懂的

saveData
方法
           //導出Excel
           var saveData = function () {
                GridData.setValue(Ext.encode(gpExec.getRowsValues({selectedOnly : false}))); 
           };
        
gpExec你的GridPanel主鍵ID

 

效果:

test.xls

 

                                                                           


作者:PEPE
出處:http://pepe.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM