ExtJs Grid导出到Excel(修正版)

以下的几个问题我都已经整理和修改:
1、没有考虑到含有序号和选择框的grid,
2、utf8转换bug.
3、宽度的bug
4、不支持ie6、ie7和Safari

修改后的代码见附件的gridToExcel.js.zip

注:我的文件编码都是utf8格式的(no bom),需要其它格式的请自行修改。

使用方法更简单,不需要定义linkbutton,直接使用标准的button

new Ext.Button({
    text: '导出到Excel',
    handle: function() {
        var vExportContent = grid.getExcelXml();
        if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3) {
            if (! Ext.fly('frmDummy')) {
                var frm = document.createElement('form');
                frm.id = 'frmDummy';
                frm.name = id;
                frm.className = 'x-hidden';
                document.body.appendChild(frm);
            }
            Ext.Ajax.request({
                url: '/exportexcel.php',
                method: 'POST',
                form: Ext.fly('frmDummy'),
                callback: function(o, s, r) {
                    //alert(r.responseText);
                },
                isUpload: true,
                params: {exportContent: vExportContent}
            })
        } else {
            document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent);
        }
});

以上以php为例,其它语言方法相同

exportexcel.php

<?php
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition:attachment;filename=export");
echo $_REQUEST['exportContent']; 
?>

修改: peacock
原文: http://www.dojochina.com/index.php?q=node/1254

英文原版: http://extjs.com/forum/showthread.php?t=32400&highlight=excel

附件大小
gridToExcel.zip3 千字节

评论

Ext.Button错误

Ext.Button那段代码,看一下,贴出来的代码最后少了一个“}”,是错误的哦