解决有关Ext Grid导出Excel在JSP½{‰çŽ¯å¢ƒä¸ä¸å¯ç”¨çš„问题
有关ExtGrid导出Excel的实现方å¼ï¼Œ¾|‘ä¸Šå·²ç»æœ‰å¾ˆå¤šï¼Œå®˜æ–¹ä¹Ÿç»™å‡ÞZº†ä¸€ä¸ªæ–¹æ¡ˆï¼Œä»£ç 䏿˜¯å¾ˆå®Œå–„,ä¸è¿‡å·²ç»æœ‰é«˜äººå¯¹˜q™ä¸ª˜q›è¡Œäº†ä¿®æ£ã€‚具体实现方å¼åŠä»£ç 我这里就ä¸å†å¤šè¯´äº†ï¼Œå¤§å®¶å¯ä»¥å‚看åQ?br />
http://www.dojochina.com/index.php?q=node/1254åQŒé™„ä»Óž¼šgridToExcel.js.txt
å…¶åŸºæœ¬æ€æƒ³æ˜¯ï¼šå®¢æˆ·ç«¯æ ¹æ®Gridæ•°æ®ç”ŸæˆExcelæ ¼å¼çš„XMLæ•°æ®åQŒç„¶åŽå‘é€åˆ°ä¸€ä¸ªæœåŠ¡ç«¯æ–‡äšgåQŒæœåŠ¡ç«¯æ–‡äšgé€?br />
˜q‡è®¾å®šContent-Typeæ¥å®žçްExcel的下载。其ä¸?#8220;导出Excel”按钮点击执行的代ç 如下:
1
if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3)
{
2
if (! Ext.fly('frmDummy'))
{
3
var frm = document.createElement('form');
4
frm.id = 'frmDummy';
5
frm.name = id;
6
frm.className = 'x-hidden';
7
document.body.appendChild(frm);
8
}
9
Ext.Ajax.request(
{
10
url: '/exportexcel.php',
11
method: 'POST',
12
form: Ext.fly('frmDummy'),
13
callback: function(o, s, r)
{
14
//alert(r.responseText);
15
},
16
isUpload: true,
17
params:
{exportContent: vExportContent}
18
})
19
} else
{
20
document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent);
21
}
例å䏿œåŠ¡ç«¯ä½¿ç”¨çš„PHPåQŒè¿™ŒDµä»£ç 在PHPä¸å¯èƒ½å¯ä»¥å¾ˆå¥½çš„工作åQŒä½†æ˜¯å¦‚果到了JSP½{‰çŽ¯å¢ƒä¸‹åQŒå°±å‡ºçŽ°äº†é—®
题,导出数æ®å¯èƒ½æ˜¯ç©ºã€?br />
问题出在哪里呢?上题q™éƒ¨åˆ†ä»£ç ä¸çš„ajaxæäº¤å…¶å®žòq¶ä¸æ˜¯çœŸæ£çš„ajaxæäº¤åQŒå› 为ajaxæäº¤æ˜¯åœ¨åŽå°æ‰§è¡ŒåQŒå›
æ¤ä¸å¯èƒ½å®žçް䏋è²åQŒå¯ä»¥çœ‹åˆ°è¿™é‡Œæœ‰formå’ŒisUploadä¸¤ä¸ªå‚æ•°åQšExtçš„ajaxè¯äh±‚ä¸å¦‚果酾|®äº†isUpload:trueåQŒåˆ™å…?br />
ajaxž®×ƒ¸æ˜¯çœŸæ£çš„ajaxè¯äh±‚åQŒè€Œæ˜¯é€šè¿‡åˆ›å¾ä¸€ä¸ªéšè—çš„IframeåQŒåƈ通过formçš„target指员q™ä¸ªiframeæ¥æäº¤æ•°æ®ï¼Œòq?br />
且å‘é€çš„header里将content-typeè®¾äØ“äº†multipart/formåQŒåœ¨JSPä¸ä¸èƒ½æˆåŠŸå¯¼å‡ºçš„åŽŸå› ž®±åœ¨˜q™é‡Œã€‚è¿™æ ïLš„æäº¤æ–¹å¼
其傿•°é€šè¿‡request.getParameter是å–ä¸åˆ°çš„ï¼Œå½“ç„¶ä½ å¯ä»¥ä‹Éç”¨ä¸Šä¼ ç»„ä»¶æ¥èŽ·å–åQŒä½†˜q™æ ·ä»£ç ž®±å˜å¾—夿‚。下é?br />
æ¥è§£å†Œ™¿™ä¸ªé—®é¢˜ï¼Œæ—¢ç„¶˜q™é‡Œçš„Ajax使用是一个模拟的formæäº¤åQŒé‚£æˆ‘们其实å¯ä»¥å®Œå…¨ä¸ç”¨ã€‚我们直接用formæ?br />
äº¤ä¸æ˜¯æ›´çœäº‹å—?解决办法如下åQšåˆ›å»ÞZ¸€ä¸ªéšè—formåQŒå…¶target讄¡½®ä¸º_blankåQŒç„¶åŽåœ¨å…¶å†…部创å»ÞZ¸€ä¸ªéšè—域å?br />
放xmlæ•°æ®åQŒç„¶åŽé€šè¿‡POSTæ–¹å¼æäº¤˜q™ä¸ªformå›_¯ã€?/p>
实现代ç åQ?/p>
1
var vExportContent = grid.getExcelXml();
2
if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3)
{
3
var fd=Ext.get('frmDummy');
4
if (!fd)
{
5
fd=Ext.DomHelper.append(Ext.getBody(),
{tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp', target:'_blank',name:'frmDummy',cls:'x-hidden',cn:[
6
{tag:'input',name:'exportContent',id:'exportContent',type:'hidden'}
7
]},true);
8
}
9
fd.child('#exportContent').set(
{value:vExportContent});
10
fd.dom.submit();
11
} else
{
12
document.location = 'data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent);
13
}}
14
JSP代ç åQ?br />
1
<%
2
response.setHeader("Content-Type","application/force-download");
3
response.setHeader("Content-Type","application/vnd.ms-excel");
4
response.setHeader("Content-Disposition","attachment;filename=export.xls");
5
out.print(request.getParameter("exportContent"));
6
%>
完整代ç 下è²åQ?a href="/Files/redhatlinux/grid2excel.rar">grid2excel.rar

]]>