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 }

希望对大家有帮助

转载于:https://www.cnblogs.com/80hou/archive/2011/09/07/2169589.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值