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

posted @   PEPE YU  阅读(1848)  评论(6编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示