• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    【HDU 2507】【ACM-ICPC算法基础训练教程 题1-6】 迷瘴(贪心)
    【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
    【读书笔记】2015年考研英语二真题翻译(帮你克服艰难之路的真理+熟路效应)
    visio给任意图形进行填充
    scanf清除缓存区
    macbook安装并破解Clion2018(Pycharm也一样)
    mac电脑对ntfs格式硬盘进行写操作(简单说就是向ntfs硬盘拷贝东西)
    查找mac下腾讯视频下载地址
    PyQt5初级教程(一)
    迷途指针
  • 原文地址:https://www.cnblogs.com/PEPE/p/2599269.html
Copyright © 2020-2023  润新知