最近在做一个项目,需要在原先的表格的基础上导出excel文件,原先是想用java后台来实现这个功能,但是,后来发现,原来extjs也附带有导出excel表的功能,就在GridPanel的基础上导出,http://www.blogjava.net/rockblue1988/archive/2012/02/29/370977.html,这是我做的时候,参考的一篇网上的文章。具体的做法是,将extjsGridPanel里面的数据拿出来,转换成xml,然后发送给后台,后台响应之后,将数据输出为Excel的格式,具体代码如下。
0
31
32
33
34
35
36
37
38
//利用extjs导出excel文件---begin
function exportExcel(gridpanel) { //传入的GridPanel的实例
var vExportContent = gridpanel.getExcelXml(); //获取数据
if (Ext.isIE8||Ext.isIE6 || Ext.isIE7 || Ext.isSafari
|| Ext.isSafari2 || Ext.isSafari3) { //判断浏览器
var fd = Ext.get('frmDummy');
if (!fd) {
fd = Ext.DomHelper.append(
Ext.getBody(), {
tag : 'form',
method : 'post',
id : 'frmDummy',
action : exportExcelGrid,
target : '_blank',
name : 'frmDummy',
cls : 'x-hidden',
cn : [ {
tag : 'input',
name : 'exportContent',
id : 'exportContent',
type : 'hidden'
} ]
}, true);
}
fd.child('#exportContent').set( {
value : vExportContent
});
fd.dom.submit();
} else {
document.location = 'data:application/vnd.ms-excel;base64,' + Base64
.encode(vExportContent);
}
}
//利用extjs导出excel文件---end
除此之外,还要引入一个文件
/**
* allows for downloading of grid data (store) directly into excel
* Method: extracts data of gridPanel store, uses columnModel to construct XML excel document,
* converts to Base64, then loads everything into a data URL link.
*
* @author Animal <extjs support team>
*
*/
/**
* base64 encode / decode
*
* @location http://www.webtoolkit.info/
*
*/
var Base64 = (function() {
// Private property
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// Private method for UTF-8 encoding
function utf8Encode(string) {
string = string.replace(/\\r\\n/g,"\\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.from