`
kimmking
  • 浏览: 546828 次
  • 性别: Icon_minigender_1
  • 来自: 中华大丈夫学院
社区版块
存档分类
最新评论

GridPanel to real Excel file(IE5+,Windows,Office)

    博客分类:
  • ext
阅读更多
GridPanel to real Excel file(Only By IE5+,Windows,Office)


What ?
There is only one static function in the object Ext.ux.Grid2Excel ,
You can use it anywhere to convert the data from a gridpanel to a local real excel file.

Where ?
It use a object(ActiveXObject("Excel.application") to create a real excel file,so it works at only windows platform with the office software installed.And then modifying the settings of the IE security to activate the activex may be necessary too.

How ?
Like this:
Ext.ux.Grid2Excel.Save2Excel(grid);

Core Code List and Demo

grid2excel.js:

/**
 * @author qinjinwei
 * 
 * time: 2008-7-24 20:28:02
 */
var  idTmr  =  ""; 
Ext.ux.Grid2Excel = {
 
 Save2Excel : function(grid)
 {
  var cm = grid.getColumnModel();
  var store = grid.getStore();
  
  var it = store.data.items;
  var rows = it.length;
  
  var   oXL   =   new   ActiveXObject("Excel.application");     
  var   oWB   =   oXL.Workbooks.Add();     
  var   oSheet   =   oWB.ActiveSheet; 
  
  for (var i = 0; i < cm.getColumnCount(); i++) {
   
   if (!cm.isHidden(i)) {
    oSheet.Cells(1, i + 1).value = cm.getColumnHeader(i);
   }
   
   for (var j = 0; j < rows; j++) {
    r = it[j].data;
    var v = r[cm.getDataIndex(i)];
    var fld = store.recordType.prototype.fields.get(cm.getDataIndex(i));
    if(fld.type == 'date')
    {
     v = v.format('Y-m-d');    
    }
    
    oSheet.Cells(2 + j, i + 1).value = v;
   }
  }
        oXL.DisplayAlerts = false;
  oXL.Save();
  oXL.DisplayAlerts = true;                    
  oXL.Quit();
  oXL = null;
    idTmr = window.setInterval("Cleanup();",1);
  }
};
function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
};



Demo :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css">
        <link rel="stylesheet" type="text/css" href="./ext/resources/css/ext-all.css">
        <script type="text/javascript" src="./ext/adapter/ext/ext-base.js">
        </script>
        <script type="text/javascript" src="./ext/ext-all-debug.js">
        </script>
        <script type="text/javascript" src="grid2excel.js">
        </script>
    </head>
    <body>
        <script type="text/javascript">
            Ext.onReady(function(){
            
                var myData = [['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'], ['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'], ['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'], ['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am']];
                
                var store = new Ext.data.SimpleStore({
                    fields: [{
                        name: 'company'
                    }, {
                        name: 'price',
                        type: 'float'
                    }, {
                        name: 'change',
                        type: 'float'
                    }, {
                        name: 'pctChange',
                        type: 'float'
                    }, {
                        name: 'lastChange',
                        type: 'date',
                        dateFormat: 'n/j h:ia'
                    }]
                });
                store.loadData(myData);
                
                // create the Grid
                var grid = new Ext.grid.GridPanel({
                    id: 'static-grid',
                    store: store,
                    renderTo: 'grid-example',
                    columns: [{
                        id: 'company',
                        header: "Company",
                        width: 160,
                        sortable: true,
                        dataIndex: 'company'
                    }, {
                        header: "Price",
                        width: 75,
                        sortable: true,
                        //renderer: 'usMoney',
                        dataIndex: 'price'
                    }, {
                        header: "Change",
                        width: 75,
                        sortable: true,
                        dataIndex: 'change'
                    }, {
                        header: "% Change",
                        width: 75,
                        sortable: true,
                        dataIndex: 'pctChange'
                    }, {
                        header: "Last Updated",
                        width: 85,
                        sortable: true,
                        renderer: Ext.util.Format.dateRenderer('m/d/Y'),
                        dataIndex: 'lastChange'
                    }],
                    //stripeRows: true,
                    //autoExpandColumn: 'company',
                    height: 350,
                    width: 600,
                    title: 'Array Grid',
                    bbar: new Ext.Toolbar({
                        buttons: [{
                            text: 'µ¼³öExcel',
                            tooltip: 'µ¼³öExcel',
                            handler: onItemClick // °´Å¥Ê¼þ 
                        }]
                    })
                });
                
                function onItemClick(item){
                
                    Ext.ux.Grid2Excel.Save2Excel(grid);
                }
                
                //grid.render('grid-example');
                //grid.getSelectionModel().selectFirstRow();
            });
        </script>
        <div id="grid-example">
        </div>
    </body>
</html>

分享到:
评论
3 楼 tmq3244286 2012-02-03  
代码运行到var   oXL   =   new   ActiveXObject("Excel.application"); 的时候
出现: Automation 服务器不能创建对象 的错误
请问如何解决
2 楼 kimmking 2008-10-14  
把这几句注释掉看看

if(fld.type == 'date')  
    {  
     v = v.format('Y-m-d');      
    }
1 楼 379548695 2008-10-10  
楼主我用啦怎么提示‘type’为空或不是对象啊?麻烦帮我下哈!

相关推荐

    gridpanel+progressbar

    gridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+progressbargridpanel+...

    ExtJS的GridPanel导出excel文件

    ExtJS的GridPanel导出excel文件,方便快捷易懂!

    Ext GridPanel导出Excel(改进)

    将页面的GridPanel中的数据导出到Excel中 测试Ext:版本2.2.1 支持GridSummary,GroupSummary和GroupHeaderPlugin插件 使用方法: 1)把三个JS文件引入到页面中 2)调用例句: var data2Excel = new Ext.icss.Data2...

    GridToExcel.rar

    "GridToExcel.rar"这个压缩包文件包含了实现这一功能的核心代码"GridToExcel.js"。 ExtJS是一个强大的JavaScript库,主要用于构建富客户端的Web应用程序。它提供了丰富的组件,如GridPanel,用于展示和操作表格数据...

    ext gridpanel多层表头分组小计导出excel与Java后台交互全代码

    该例子实现了ext的gridpanel多层表头+分组+小计以及与Java后台交互的全代码。还有自适应浏览器大小的功能包括导出excel,里面有注释,可能注释不全。分别为group.jsp,totals.jsp页面。

    EXTJSEXT实例GridPanel.

    renderTo: Ext.getBody() // 渲染到页面的body元素 }); ``` 此外,EXTJS的GridPanel还支持许多高级特性,例如: - **行编辑**: 可以通过添加RowEditor插件实现单元格级别的编辑。 - **分页**: 使用PagingToolbar...

    ExtJs+Aspose.Cells+Asp.net导入Excel实例

    Aspose.Cells是一款强大的.NET组件,它允许开发人员在不依赖Microsoft Office的情况下处理Excel文件。它提供了广泛的API,可以读取、写入、转换Excel工作簿,以及执行各种计算和格式化任务。在这个项目中,Aspose....

    ext.net 动态创建gridpanel

    5. **自定义行为**: 你还可以添加自定义的事件处理器,如单击行、双击行、单元格编辑等,以实现特定的业务逻辑。 6. **性能优化**: 在处理大量数据时,考虑使用远程分页、延迟加载(Lazy Loading)和服务器端...

    ExtJS4.1+MVC3+Spring.NET1.3+EF5 整合源码

    ExtJS4.1+ASP.NET MVC3+Spring.NET1.3+EF5+SQLite 整合源码,本人整合多日,也算来之不易,需要的可以下载。 原文地址:http://blog.csdn.net/xz2001/article/details/8716541 涉及到以下框架:ExtJS4.1、MVC3、...

    扩展GridPanel

    扩展的GridPanel,让其分页后保持选择状态

    gridpanel常用操作

    在本文中,我们将深入探讨`GridPanel`在Extnet框架中的常见操作,包括选择行、前后台方法调用、增删行以及弹出窗体的实现方式。这些操作是开发Web应用程序时处理数据表单和数据展示的关键部分。 首先,我们来看如何...

    Ext GridPanel 中实现加链接操作

    ### Ext GridPanel 中实现加链接操作 在前端开发领域中,Ext JS 是一款非常流行的 JavaScript 框架,用于构建企业级的 Web 应用程序。Ext GridPanel 是该框架中的一个重要组件,常用于展示表格数据。本文将详细介绍...

    gridPanel添加按钮

    5. **meihanghoumian.txt**: 这个文件名可能包含某种特定的信息,但由于没有提供文件内容,我们无法直接关联到`gridPanel`添加按钮的知识点。不过,它可能是关于这个问题的一个案例、示例代码或者说明。 综上所述,...

    ExtJs GridPanel双击事件获得双击的行

    在ExtJs中,GridPanel是用于展示数据的常用组件,它可以提供丰富的功能,如排序、分页、筛选等。在实际应用中,我们经常需要监听用户的交互行为,比如双击行进行进一步的操作。本篇文章将深入讲解如何在ExtJs ...

    extjs模拟excel表格

    5. **复制和粘贴**:模拟Excel的一个关键特性是复制和粘贴功能。这需要实现自定义的事件处理,捕获选区的复制操作,然后在其他位置执行粘贴。数据可以存储在剪贴板上,以便跨GridPanel使用。 6. **排序与过滤**:...

    ExtJs 2.0 GridPanel+Struts2 with JSON plugin[更新代码]

    5. **排序和分页**:通过设置 GridPanel 的 sortableColumns 和 pagingToolbar 属性,可以实现列的排序和数据的分页功能。 6. **Struts2 Action 与 ExtJS 的交互**:Action 方法处理业务逻辑后,需将结果转换为 ...

    Extjs入门教程(treePanel和GridPanel)

    在集成TreePanel和GridPanel时,可能涉及到的概念有:将TreePanel的节点与GridPanel的数据关联,实现点击树节点时动态加载或更新GridPanel的数据,以及可能的父子数据联动操作。 在实际应用中,你可能会学习到以下...

    Ext.grid.GridPanel 删除线

    Ext.grid.GridPanel 删除线 放到example文件夹下运行

    改变gridpanel的行颜色

    ### 改变GridPanel的行颜色 在使用GridPanel组件进行数据展示时,为了提高可读性和用户体验,我们经常需要对表格中的某些行或单元格进行颜色上的区分。本文将详细介绍如何通过不同的方法来实现这一功能,包括在加载...

    Ext的gridpanel控件二次加载问题

    在Ext JS这个强大的JavaScript框架中,GridPanel是一个非常重要的组件,用于展示数据表格。然而,在实际应用中,可能会遇到一个常见的问题:当GridPanel需要进行第二次加载时,数据或者功能可能会丢失。这个问题主要...

Global site tag (gtag.js) - Google Analytics