开发思路:

- 序列化当前GridPanel 数据, 表头结构(用于对应关系), 通过控制器Aspose写到Excel中, 然后返回临时文件地址, 弹出窗口下载.

function btnExportOut(gpl, isOnlyCurrentPage) {
        var reportName = '导出文件名前缀';                   if (Ext.isEmpty(gpl.xtype)) {
            gpl = App[gpl];
            if (gpl.xtype != 'grid' && gpl.xtype != 'treepanel') {
                Ext.MessageBox.show({
                    title: "提示",
                    msg: "导出参数错误。",
                    modal: true,
                    buttons: Ext.Msg.OK,
                    icon: Ext.Msg.INFO
                });
                return;
            }
        }
        if (gpl.xtype == "grid" && gpl.store.data.items.length == 0 && isOnlyCurrentPage == 1) {
            Ext.MessageBox.show({
                title: "提示",
                msg: "列表没有数据,不能进行导出。",
                modal: true,
                buttons: Ext.Msg.OK,
                icon: Ext.Msg.INFO
            });
            return;         }
        if (gpl.xtype == "treepanel" && gpl.items.length == 0 && isOnlyCurrentPage == 1) {
            Ext.MessageBox.show({
                title: "提示",
                msg: "列表没有数据,不能进行导出。",
                modal: true,
                buttons: Ext.Msg.OK,
                icon: Ext.Msg.INFO
            });
            return;
        }
        Ext.net.Mask.show({ msg: '正在导出数据,请稍候...' });
        
        var datas = getGirdAllData(gpl);
        Ext.Ajax.request({
            url: isOnlyCurrentPage == 1 ? '/当前页' : '/全部页/',
            params: {
                queryP: Ext.encode(gpl.store.readParameters().apply), //Grid 的parameter参数数组
                jsonData: Ext.encode(datas), //当前页需要把数据传入. 全部页用不到这个数据. 
                _reportName: reportName,
                _headerStruct: getEncodeGridHeader(gpl)
            },
            method: 'POST',
            timeout: 600000,
            success: function (u) {
                //防止下载出现0kb情况,等待后台下载
                setTimeout(function () {
                    Ext.net.Mask.hide();
                    showExport(u.responseText);
                }, 3000);
            },
            failure: function (u) {
                Ext.net.Mask.hide();
                Ext.Msg.alert(u.responseText);
            }
        })     }
    
     var showExport = function (url) {
        Ext.MessageBox.show({
            title: "Excel下载提示",
            msg: "<a href='" + url + "' style='color: blue;text-decoration: none;font-size:15px;font-weight: bold;'>请点击此处下载到本地</a>",
            modal: true,
            buttons: Ext.Msg.CANCEL,
            icon: Ext.Msg.INFO
        });
    }
    
    function getEncodeGridHeader(gpl) {
        var headers;
        dataIndex = 0;
        var headers = getAllHeader(gpl.columns, gpl);        
        headers = Ext.encode(headers);
        return headers;
    } 
    
    //获取所以列并带主键
    var getAllHeader = function (gplColumns, gpl) {
        var data = [];
        for (var colIndex in gplColumns) {
            var col = gplColumns[colIndex];
            if (col.dataIndex != "Checked") {
                var colText = col.text == null ? "" : col.text;
                if (colText != "") {
                    var tmp = {
                        Text: col.text.toLowerCase().replace(/<br\/>/g, "").replace(/<\/br>/g, "").replace(/</g, "").replace(/>/g, ""),
                        Width: getWidth(col),
                        Cols: []
                    };
                    var field = gpl.store.getFieldByName(col.dataIndex);
                    if (field) {
                        tmp.DataType = field.type.type;
                    }
                    if (col.items && col.items.length > 0) {
                        tmp.Cols = getAllHeader(col.items.items, gpl);
                    } else if (col.columns && col.columns.length > 0) {
                        tmp.Cols = getAllHeader(col.columns, gpl);
                    } else {
                        tmp.DataIndex = col.dataIndex;
                        tmp.Index = "d" + dataIndex++; //索引
                    }
                    if (col.hidden) {
                        tmp.Hiden = true;
                        if (colText.toLowerCase() == "id" || colText.toLowerCase() == "mid" || colText.toLowerCase() == "sid") {
                        }
                        else {
                            continue;
                        }
                    }
                    else {
                        tmp.Hiden = false;
                    }
                    tmp.xtype = col.xtype; //列类型
                    if (col.editor) {
                        tmp.editor = col.editor.xtype; //文本框类型
                    }
                    else {
                        tmp.editor = "";
                    }
                    if (col.xtype == 'rownumberer' || col.xtype == 'commandcolumn') {
                        continue;
                    }
                    data.push(tmp);
                }
            }
        }
        return data;
    };     //获取宽度
    var getWidth = function (col) {
        if (col.width) {
            return col.width;
        } else if (col.getWidth) {
            return col.getWidth();
        } else {
            return 100;
        }     }

一堆操作获得表头-实际列json结构:

调用部分:

<ext:Button ID="Button3" runat="server" Text="导出全部页Excel" Icon="ArrowDown" TagString="grid">
                                        <Listeners>
                                            <Click Handler="btnExportOut(SalaryBonusCalculationInForGPanel, 0)" />
                                        </Listeners>
                                    </ext:Button>

导出Excel(Ext 前台部分)的更多相关文章

  1. asp.net ashx导出excel到前台

    最近有一个项目使用以前的ashx,不能使用FileResult,只有通过response返回拼接好的字符串.但是通过查阅资料拼接的字符串总是提示文件格式不匹配,虽然能正常打开,但是体验很不好,在此总结 ...

  2. Extjs4.2纯前台导出Excel总结

    前段时间做了两个项目,用到了Extjs4.2纯前台导出Excel,遇到很多的问题,从网上也找了很多资料,在这里总结一下,做一个记录: 使用方法: 1.下载extexcel文件包,这里可以下载http: ...

  3. ext.net 2.5 导出excel的使用方法

    前台页面的导入,导出 <ext:FileUploadField ID="FileUploadField_Import" runat="server" Bu ...

  4. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  5. 导出Excel实现 (ASP.NET C# 代码部分)

    背景: 实现导出Excel功能. 技术: ASP.NET  , 采用`Aspose.Cells`第三方组件, C# 实现通用部分. 根据前台Ext Grid完成导入Excel中文列与实际存储列的对应关 ...

  6. Oracle导出excel

    oracle导出excel(非csv)的方法有两种,1.使用sqlplus  spool,2.使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件: ...

  7. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)

    自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...

  8. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  9. asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

    一.背景 在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高. 二.问题分析 鉴于用户只要求最终将数据库中的数据导出excel,对于格 ...

随机推荐

  1. 安装redis及异常处理

    安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8. ...

  2. 【golang】kafka

    这篇博客是用来记录用go安装及操作kafka库的时候踩到的坑~ 安装kafka库 首先我参考了博客:https://blog.csdn.net/tflasd1157/article/details/8 ...

  3. js splice函数 数组增加,替换,删除

    splice函数参数介绍: 第一个参数: 对于数数组的操作起始位置. 第二个参数: 从第一个参数开始,删除数组中的个数. 从第三个参数之后所有参数(如果有):执行完第二步之后,都插入到第一个参数的起始 ...

  4. Android : 跟我学Binder --- (3) C程序示例

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  5. History of program(1950-2020)

    1957年 约翰·巴科斯(John Backus)创建了是全世界第一套高阶语言:FORTRAN. John Backus 1959年 葛丽丝·霍普(Grace Hopper)创造了现代第一个编译器A- ...

  6. 基于TCP的安卓服务器开发

    一.说明 前文介绍了基于安卓客户端的开发,在此基础上,进行少许改动即可开发出一款基于TCP的安卓服务器,理论知识请参见笔者上一篇博文,下面直接实践操作. 二.权限申明 <!--允许应用程序改变网 ...

  7. 剑指Offer 55. 链表中环的入口结点 (链表)

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目地址 https://www.nowcoder.com/practice/253d2c59ec3e4bc68d ...

  8. 剑指Offer 24. 二叉树中和为某一值的路径 (二叉树)

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  9. acrgis 解决矢量转栅格分辨率过大造成连续值变离散且出现空白

    目标:解决北京河流矢量polygon 转栅格的问题 设置栅格大小和影像一致30*30----结果发现,因为cell过大,原本连续的是矢量面变得不连续了,特别细的河流会出现间断(如下图所示): 1号 网 ...

  10. 【oracle入门】数据完整性约束

    数据的完整性约束是对数据描述的某种约束条件,关系型数据模型中可以有三类完整性约束:实体完整性.参照完整性和用户定义的完整性. 实体完整性Entity Integrity 一个基本关系通过对应显示世界的 ...