flex4 与报表

在传统的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值