FLEX에서 DataGrid Excel 내보내기(웹 버전, AIR 제외)

7150 단어 datagrid

FLEX에서 DataGrid Excel 내보내기


Flex의 웹 응용 프로그램은 데이터가 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 }

도움이 됐으면 좋겠어요.

좋은 웹페이지 즐겨찾기