!!!强烈的跪求!!!Extjs grid的内容打印和导出EXECl
强烈的跪求!Extjs grid的内容打印和导出execl
我正在学习Extjs现在利用,Extjs 的grid完好的显示出传给页面的json数据.源码如下,现在迫切需要解决,打印grid内容和导出grid内容为execl文件的方法!!
代码是最简单的表格页面
谢谢
		Ext.onReady(function(){
			var data1 = <%=str1%>;		
			var ds1 = new Ext.data.Store({
				proxy: new Ext.data.PagingMemoryProxy(data1),
				reader: new Ext.data.JsonReader({},[
					{name:'nsrsbh'}				
				])
			});			
		var cm1 = new Ext.grid.ColumnModel([
					new Ext.grid.RowNumberer(),
					{header:'XXX',dataIndex:'nsrsbh'}
									  ]);
			cm1.defaultSortable = true;			
			var pagingBar = new Ext.PagingToolbar({
		        pageSize: 25,
		        store: ds1,
		        displayInfo: true,
		        displayMsg: '本页显示数据范围 {0} - {1} of {2}',
		        emptyMsg: "没有数据",		         
		        items:[
		            '-', {
		            pressed: true,
		            enableToggle:true,
		            text: 'Show Preview',
		            cls: 'x-btn-text-icon details',
		            toggleHandler: function(btn, pressed){
		                var view = grid.getView();
		                view.showPreview = pressed;
		                view.refresh();
		            }
		        }]
		    });     			     			     			     		     			     			     			     			     			     			
			var grid1 = new Ext.grid.GridPanel(
				{
					renderTo:'grid1',
					autoSizeColumns:true,
					frame:true,
					title:"XXX",
					width:750,
					height:400,
					cm:cm1,
					store:ds1,				
				bbar: pagingBar         
				});						
				// render it
			    grid1.render();
			    // trigger the data store load			    
			     ds1.load({params:{start:0, limit:25}});
			});
		</script>
	</head>
	<body>		
		<div id="grid1"></div>
			</body>
</html>
------解决方案--------------------
下面的函数,只需要传递要下载数据的grid即可
此函数下载grid的数据时,如果grid中某些字段被隐藏,则不会下载  
因此,可以让用户自定义下载时需要的列
提供给楼主参考一下
注意:要允许ACTIVEX控件的运行,要不EXCEL无法打开,就不行了.
//---------------------------
//下载指定视图中的数据到EXCEL中
function downloadViewData(grid)
{
	try {
		var xls = new ActiveXObject ("Excel.Application");
	}
	catch(e) {
		alert( "要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!");
		return "";
	}
	xls.visible =true;  //设置excel为可见
	var xlBook = xls.Workbooks.Add;
	var xlSheet = xlBook.Worksheets(1);	
	var cm = grid.getColumnModel();
	var colCount = cm.getColumnCount();
	var temp_obj = [];
	//只下载没有隐藏的列(isHidden()为true表示隐藏,其他都为显示)
	//临时数组,存放所有当前显示列的下标
	for(i=0;i<colCount;i++){
		if(cm.isHidden(i) == true){
		}else{
			temp_obj.push(i);
		}
	}
	for(i=1;i<=temp_obj.length;i++){
		//显示列的列标题
		xlSheet.Cells(1,i).Value = cm.getColumnHeader(temp_obj[i - 1]);
	}
	var store = grid.getStore();
	var recordCount = store.getCount();
	var view = grid.getView();
	for(i=1;i<=recordCount;i++){
		for(j=1;j<=temp_obj.length;j++){
			//EXCEL数据从第二行开始,故row = i + 1;
			xlSheet.Cells(i + 1,j).Value = view.getCell(i - 1,temp_obj[j - 1]).innerText;
		}
	}
	xlSheet.Columns.AutoFit;
	xls.ActiveWindow.Zoom = 75
	xls.UserControl = true;  //很重要,不能省略,不然会出问题 意思是excel交由用户控制
  	xls=null;
  	xlBook=null;
  	xlSheet=null;
}
-----