フレームワーク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形式にエクスポートする方法ですか?