1

フレームワークJavaScriptExtJSバージョン3.2.1を使用しています。データグリッドから、データをExcelファイルにエクスポートしたいと思います。グリッドに1つ以上のチェックボックス列がある場合を除いて、すべてが正常に機能しています。この場合、エラーメッセージが表示されます。

p is null

チェックボックスを含む列を非表示にすると、再度エクスポートできます。チェックボックス列を定義するときのコードスナップショットは次のとおりです(多くのグリッドビューを使用するため、フレームワークを構築しました)。

this.column_model_sample_confirmed = new Ext.grid.CheckColumn({
        id:         cmnSampleConfirmed,
        header:         cmhSampleConfirmed,
        dataIndex:      cmnSampleConfirmed,
        align:          _KMX_EXT_CSS_LEFT_,
        width:          30,
        sortable:       true,
        hidden:         false, // sample_confirmed
        resizable:      true,
        filter:         {},
        editor:         new Ext.form.TextField({}),
        editable:       false,
        menuDisabled:   false,
        hideable:       true,
        fixe:           true
    });

このコードは正常に機能するため、使用する変数/定数には注意を払わないでください。ここで、「Excelにエクスポート」ボタンを実装するためのコードは次のとおりです。

   /**
    * Export the grid in Excel
    * FIXED: To get more compatibility with major browsers
    * @param {Object}   my_grid         an editor grid panel instance
    * @param {String}   my_url_export   the url to get the data exported (ajax call)
    * @return NEANT
    */
    var _kmx_fct_exportExcel = function(my_grid, my_url_export){
        // we have to change the name of the worksheet to avoid some forbidden caracters such "(" or ":" to be able to open it with EXCEL
        var tmp = my_grid.title;
        try {
            my_grid.setTitle('Sheet1');
            var exportContent = my_grid.getExcelXml();
                    alert('THIS ALERT IS NOT DISPLAYED!');
            if (!Ext.isIE6 && !Ext.isIE7 && !Ext.isSafari && !Ext.isSafari2 && !Ext.isSafari3) {
                //alert('Ext.isIE6 = ' + Ext.isIE6 + "\n" + 'Ext.isIE7 = ' + Ext.isIE7 + "\n" + 'Ext.isSafari = ' + Ext.isSafari + "\n" + 'Ext.isSafari2 = ' + Ext.isSafari2 + "\n" + 'Ext.isSafari3 = ' + Ext.isSafari3);
                document.location='data:application/vnd.ms-excel;base64,' + Base64.encode(exportContent);
            }
            else {
                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: my_url_export,
                    method : _self.kmx_form_method_post,
                    form: 
                        Ext.fly('frmDummy'),
                        callback: function(o, s, r){
                            alert(r.responseText);
                            //alert('_kmx_fct_exportExcel callback function: OK');
                        },
                    isUpload: true,
                    params: { ex: exportContent }
                });
            }
        }
        catch (err) {
            txt="There was an error on trying to export the data.\n\n";
            txt+="Error message: " + err.message + "\n\n";
            txt+="Click OK to continue.\n\n";
            alert(txt);
        }
        my_grid.setTitle(tmp); // restore the grid panel name
    };

このプライベート関数は、ExtJS 3を使用していた人々のために、グリッドパネルの「クラス」内で定義されています。繰り返しになりますが、私が使用する変数/定数にお金を払わないでください。問題は次の行のようです。

var exportContent = my_grid.getExcelXml();

このコードの直後のアラートメッセージのため:

alert('THIS ALERT IS NOT DISPLAYED!');

は表示されません。 だから、私の質問は、チェックボックスの列があるときにデータをExcel形式にエクスポートする方法ですか?

4

0 に答える 0