flex4 与报表

来源:互联网 发布:淘宝ka商家是什么意思 编辑:程序博客网 时间:2024/06/09 23:52

在传统的web语言例如jsp或者asp对于将结果导出成excel报表形式已经变得相当简单和成熟了,在flex里面是如何将表格单元格的数据导出来的呢?

adobe公司给我们提供了一种解决方案:首先将表格里面的数据序列化成为字符串,然后利用URLVariables和URLLoader类将字符串发送到服务器端脚本,在服务器端加上文件头,指定filename和contentType,利用浏览器在客户端打印出来。贴出转换的函数代码

private function convertDGToHTMLTable(dg : DataGrid):String { //Set default values 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;  //Retrieve the headercolor if(dg.getStyle("headerColor") != undefined) {  hcolor = [dg.getStyle("headerColor")]; } else {  hcolor = dg.getStyle("headerColors"); }      //Set the htmltabel based upon knowlegde from the datagrid str+= '<table width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'">';  //Set the tableheader data (retrieves information from the datagrid header     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");  //Loop through the records in the dataprovider and  //insert the column information into the table 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;}private function loadDGInExcel(dg : DataGrid, url : String):void { if(isExport) {  return ; }  isExport = true;//next export not permit var variables:URLVariables = new URLVariables();  variables.htmltable = convertDGToHTMLTable(dg); var u:URLRequest = new URLRequest(url); u.data = variables; //Pass the variables u.method = URLRequestMethod.POST; //Don't forget that we need to send as POST     navigateToURL(u,"_top");    isExport = false;//next export permit}    

下面贴出服务器的jsp页面代码:
<%@ page language="java" pageEncoding="UTF-8"%><%@ page contentType="application/vnd.ms-word;charset=GB2312"%><% request.setCharacterEncoding("UTF-8"); response.setHeader("Content-disposition","attachment; filename=data.doc"); String str = request.getParameter("htmltable"); //str = new String(str.getBytes("UTF-8"), "GB2312"); out.print(str); //<%@ page contentType="application/vnd.ms-word; charset=gb2312" % response.setHeader("Content-disposition","attachment; filename=data.xls"); //Excel为%@ page contentType="application/msexcel; charset=gb2312" %%>

函数代码太多,简单讲一讲,第一个函数将一个datagrid序列化,第二个函数发送请求,jsp接受请求并且加上头部文件。
0 0
原创粉丝点击