• FLex中 DataGrid导出Excel(web版,非AIR)


      FLex中 DataGrid导出Excel

        Flex的Web应用程序,经常有数据导出Excel的需求。我从前的处理方式为:FLex的DataGrid数据传入C#,在服务端处理生成Excel文件,之后再将生成的文件地址传回Flex,进行下载

        这样做不仅在编程实现上较为麻烦,而且速度较慢,现在可直接通过Flex生成 Html格式的字符串,然后传入服务端的一个asxh文件中,输出到客户端浏览器,下面是代码

        

    import flash.errors.*;
    import flash.events.*;
    import flash.external.*;
    import flash.net.URLRequest;
    import flash.net.URLVariables;
    
    /**
     * 作者:IT小金
     * 时间:2011-09-07
     * 功能:FLex DataGird生成HTML 导出Excel
     */
     
    /*将DataGird导出成HTML格式*/
    private function convertDGToHTMLTable(dg:DataGrid):String {
    	//设置默认参数
    	var font:String = dg.getStyle('fontFamily');
    	var size:String = dg.getStyle('fontSize');
    	var str:String = '';
    	var colors:String = '';
    	var style:String = 'style="font-family:'+font+';font-size:'+size+'pt;"';				
    	var hcolor:Array;
    	
    	//设置标题行颜色
    	if(dg.getStyle("headerColor") != undefined) {
    		hcolor = [dg.getStyle("headerColor")];
    	} else {
    		hcolor = dg.getStyle("headerColors");
    	}				
    	
    	//根据datagrid设置基础结构
    	str+= '<table width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'">';
    	
    	//设置列头			
    	for(var i:int = 0;i<dg.columns.length;i++) {
    		colors = dg.getStyle("themeColor");
    			
    		if(dg.columns[i].headerText != undefined) {
    			str+="<th "+style+">"+dg.columns[i].headerText+"</th>";
    		} else {
    			str+= "<th "+style+">"+dg.columns[i].dataField+"</th>";
    		}
    	}
    	str += "</tr></thead><tbody>";
    	colors = dg.getStyle("alternatingRowColors");
    	
    
    	//设置单元格数据,数据遍历DataGird
    	for(var j:int =0;j<dg.dataProvider.length;j++) {					
    		str+="<tr width=\""+Math.ceil(dg.width)+"\">";
    			
    		for(var k:int=0; k < dg.columns.length; k++) {
    			
    			if(dg.dataProvider.getItemAt(j) != undefined && dg.dataProvider.getItemAt(j) != null) {
    				if(dg.columns[k].labelFunction != undefined) {
    					str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.columns[k].labelFunction(dg.dataProvider.getItemAt(j),dg.columns[k].dataField)+"</td>";
    					
    				} else {
    					str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.dataProvider.getItemAt(j)[dg.columns[k].dataField]+"</td>";
    				}
    			}
    		}
    		str += "</tr>";
    	}
    	str+="</tbody></table>";
    
    	return str;
    }
    
    
    /*接Asp。net中 ashx一般处理程序,输出html成Excel文件
     */
    private function loadDGInExcel(dg:DataGrid,url:String):void {
    
    	var variables:URLVariables = new URLVariables(); 
    	variables.htmltable	= convertDGToHTMLTable(dg);
    	
    	var u:URLRequest = new URLRequest(url);
    	u.data = variables; 
    	u.method = URLRequestMethod.POST; 
        navigateToURL(u,"_self");
    }       
    
    

    下面是在.net中建立的一个一般处理程序,代码如下

     1 <%@ WebHandler Language="C#" Class="JinExcelExport"%>
    2
    3 using System;
    4 using System.Web;
    5
    6 publicclass JinExcelExport : IHttpHandler {
    7
    8 publicvoid ProcessRequest (HttpContext context) {
    9
    10 context.Response.ContentType ="application/vnd.ms-excel";
    11 context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=ExportExcel.xls"));
    12 context.Response.Write(context.Request.Form["htmltable"]);
    13
    14 }
    15
    16 publicbool IsReusable {
    17 get {
    18 returnfalse;
    19 }
    20 }
    21
    22 }

    希望对大家有帮助

  • 相关阅读:
    Java8新特性(转载)
    Mysql学习笔记—时间计算、年份差、月份差、天数差(转载)
    Mysql学习笔记—concat以及group_concat的用法(转载)
    Controller中返回数据总结(ResponseEntity,@ResponseBody,@ResponseStatus)
    Java BigDecimal详解
    WebMagic简介和使用
    poi根据模板导出word文档
    谈谈ConcurrentHashMap1.7和1.8的不同实现
    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
    JAVA优化技巧分享 让游戏更加的流畅
  • 原文地址:https://www.cnblogs.com/80hou/p/2169589.html
Copyright © 2020-2023  润新知