在Adobe的RIA开发环境下,flex并没有导出Excel的功能,在完成此类功能的时候,在网上Google了很多相关文章,其中提到了利用Flex将DataGrid的数据拼凑成字符串然后利用JSP获取字符串形成Excel文件,在浏览器端给用户提供Excel下载功能。

以上就是DataGrid导出Excel的主要思想。主要代码如下:

1.Flex端生成字符串:

As代码  
public final class ExportToExcel { public function ExportToExcel() { super(); } /** 在导出数据的时候有可能出现单元格数据长度过长而导致Excel在显示时 * 出现科学计数法或者#特殊符号,在此设置单元格宽度比例WIDTHSCALE,在 * 代码中每个单元格的宽度扩展适当的比例值WIDTHSCALE。 */ public static var WIDTHSCALE:Number=2.0; /** * 将DataGrid转换为htmltable * @author 陈文锋 54cwf@163.com * @param: dg 需要转换成htmltable的DataGrid * @return: String */ public static function convertDGToHTMLTable(dg:DataGrid):String { //设置默认的DataGrid样式 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; //检索DataGrid的 headercolor if(dg.getStyle("headerColor") != undefined) { hcolor = [dg.getStyle("headerColor")]; } else { hcolor = dg.getStyle("headerColors"); } str+= '<table width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'" mce_style="background-color:#' +Number((hcolor[0])).toString(16)+'">'; //设置tableheader数据(从datagrid的header检索headerText信息) 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"); 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] as DataGridColumn).labelFunction != undefined) { str += "<td width=/""+Math.ceil((dg.columns[k] as DataGridColumn).width*ExportToExcel.WIDTHSCALE)+"/" "+style+">"+(dg.columns[k] as DataGridColumn).labelFunction(dg.dataProvider.getItemAt(j),dg.columns[k].dataField)+"</td>"; } else { str += "<td width=/""+Math.ceil(dg.columns[k].width*ExportToExcel.WIDTHSCALE)+"/" "+style+">"+dg.dataProvider.getItemAt(j)[(dg.columns[k] as DataGridColumn).dataField]+"</td>"; } } } str += "</tr>"; } str+="</tbody></table>"; return str; } /** * 将制定的DataGrid加载到Excel文件,此方法传入一个htmltable字符串参数到后台Script脚本,然后浏览器给用户提供一个Excel下载 * @author Chenwenfeng * @params dg 需要导入的数据源DataGrid * @params url excel文件下载路径 */ public static function loadDGInExcel(dg:DataGrid,url:String):void { //设置URLVariables参数变量,动态增加属性htmltable 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");//"_self" 指定当前窗口中的当前帧。 //"_blank" 指定一个新窗口。 //"_parent" 指定当前帧的父级。 //"_top" 指定当前窗口中的顶级帧。 } }

2.JSP代码:

Jsp代码  
<%@ page language="java"%> <%@ page contentType="application/msexcel;charset=GBK" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); response.setHeader("Content-disposition","attachment; filename=DownLoad.xls"); String str = request.getParameter("htmltable"); out.print(str); %>

一般情况下将JSP文件放在工程的WebRoot/bin目录下,然后在调用AS类的loadDGInExcel函数,注意需要得到正确的Excel文件下载路径url.还有就是JSP的设置问题,setHeader函数的第二个参数attachment表示会有下载提示框出现,若换成inline(似乎是这个单词)则没有下载提示框,浏览器会直接打开Excel文件

PS:在开始的时候还出过Excel出现科学计数法或者#等问题(因为Excel的单元格宽度太小造成的),后来设置了一个单元格宽度扩展比例。问题解决了。

转载于:https://www.cnblogs.com/JPAORM/archive/2011/03/25/2509827.html

DataGrid导出Excel相关推荐

  1. Easy UI DataGrid 导出Excel表格

    大体介绍一下,前后端完全分离.前端html5,后台用的asp.net的一般处理程序. 自己写了一个单独的js来实现报表的导出,因为客户对于报表的样式要求不是很高,所以做成这样基本够用了. 接下来贴代码 ...

  2. DataGrid 导出 EXCEL(简单,实用)

    Response.ContentEncoding =  // 有时用 gb2312 不能正常显示中文,要用 utf-8 System.Text.Encoding.GetEncoding("G ...

  3. DataGrid 导出到 Excel 的帮助类

    DataGrid 导出到 Excel 的帮助类 //========================================================================== ...

  4. asp.net中DataGrid利用RenderControl导出Excel的问题

    asp.net中DataGrid利用RenderControl导出Excel的问题 问题: "DataGridLinkButton"的控件"DataGrid1_ctl14 ...

  5. java datagrid导出excel_从datagridview中导出数据到excel

    第一种办法:直接在button的Click事件中写代码进行导出:private void button6_Click(object sender, EventArgs e) { SaveFileDia ...

  6. 【Vegas原创】导出Excel时,如何将数字格式转为文本格式?(07.12.13 Update)

    DataGrid: Asp.Net WebForm中DataGrid导出的时候,在ItemDataBound内  if(e.Item.ItemType == ListItemType.Item ||  ...

  7. .net 导出excel和word

    导出Word:     private   void   Button13_Click(object   sender,   System.EventArgs   e)     {     this. ...

  8. .NET 导出Excel

    ExportData类: View Code /// <summary>/// xxx/// 导出报表数据存入word或excel文件/// 2012-03-21/// </summ ...

  9. SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二)

    为什么80%的码农都做不了架构师?>>> SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一) 大概的截图.很简单的小功能 注:使用的是MyEcli ...

最新文章

  1. ping -c3 baidu.com  ping过去是这样,代表网络畅通
  2. java中public、protected、default、private权限问题
  3. 42.Android之ListView中ArrayAdapter简单学习
  4. HTML文件类型定义
  5. 心理学博士做了阿里巴巴首席技术官并且给马云赚了5000亿
  6. 【agc004d】Teleporter
  7. 跳打开hdu 1208 (DP)
  8. linux cpu 个数、核心数、线程数
  9. 14、数 据 库:破解还原Access数据库密码
  10. sin35度等于多少怎么用计算机算,sin35度等于多少_tan35°等于几分之几
  11. 官方个人免签系统网站源码柒上支付聚合三方四方支付系统
  12. c#餐饮系统打印机_C# 实现打印机功能
  13. App测试如何进行?手机app测试要点
  14. 基于51单片机的智能温控风扇设计
  15. 利用scrapy爬取美图录网站图集按模特姓名存储到本地(三)
  16. JavaScript实现单击切换图片
  17. Unity利用Input类实现摄像机镜头拉近与拉远
  18. sis最新ip地址2020入口一_2020最新大厂内部 PHP 高级工程师面试题汇总(一)
  19. 一起来学java!!! day003 流程控制01 你掉了金斧头还是银斧头?
  20. Android开发唯一的出路:进阶学习,附超全教程文档

热门文章

  1. BZOJ 2440 完全平方数
  2. 文件上传控件 自定义样式
  3. 框架通讯契约——接口
  4. 用 Flutter 写一个精美的登录页面(最新版)
  5. 日常积累--javaweb
  6. [转]python进阶到高阶大全
  7. 心得总结:一名优秀的数据分析专家的能力模型
  8. 详解3种常用数据分析方法,满足你职场95%的高频需求
  9. 电力企业信息化系统之调度信息报送系统整体解决方案
  10. 利用finereport建设保险公司决策分析系统的思路和方法