`
deepfuture
  • 浏览: 4411565 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80123
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70327
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103580
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286537
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15043
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67780
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32289
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46075
社区版块
存档分类
最新评论

Flex导出Excel

 
阅读更多

Flex前端+Java后台,要将Flex界面中AdvancedDataGrid的数据导出成Excel文件。有2种方法:

1.直接在前台导出。
    使用开源项目as3xls,下载个解决了中文乱码的as3xlsUTF8.swc包,加到Flex工程的引用库中。
    AS代码,点击“导出Excel”按钮后的函数:

Java代码 复制代码 收藏代码
  1. var sheet:Sheet = new Sheet();   
  2. private function export2ExcelHandel(e:MouseEvent):void  
  3. {   
  4.     //在前台生成Excel   
  5.     var excelFile:ExcelFile=new ExcelFile();   
  6.     var arr:ArrayCollection=myTable.dataProvider as ArrayCollection;   
  7.     for(var i:int=0; i<arr.length; i++)   
  8.     {   
  9.         var obj:Object=arr[i];   
  10.         var j:int=0;   
  11.         for(var key:String in obj)   
  12.         {   
  13.             excelFile.sheets.addItem(generateSheet(0,j,key));      
  14.             excelFile.sheets.addItem(generateSheet(i,j,obj[key]));   
  15.             j++;   
  16.         }   
  17.     }          
  18.     var mbytes:ByteArray=excelFile.saveToByteArray();   
  19.     var file:FileReference=new FileReference();   
  20.     file.save(mbytes,"测试文件.xls");    
  21. }   
  22.                
  23. function generateSheet(i:int,j:int,o:Object):Sheet{   
  24.     if(!sheet){       
  25.         sheet = new Sheet();       
  26.         sheet.resize(10,10);       
  27.     }       
  28.     sheet.setCell(i, j, String(o));       
  29.     return sheet;       
  30. }      
var sheet:Sheet = new Sheet();
private function export2ExcelHandel(e:MouseEvent):void
{
    //在前台生成Excel
    var excelFile:ExcelFile=new ExcelFile();
    var arr:ArrayCollection=myTable.dataProvider as ArrayCollection;
    for(var i:int=0; i<arr.length; i++)
    {
        var obj:Object=arr[i];
        var j:int=0;
        for(var key:String in obj)
        {
            excelFile.sheets.addItem(generateSheet(0,j,key));	
            excelFile.sheets.addItem(generateSheet(i,j,obj[key]));
            j++;
        }
    }       
    var mbytes:ByteArray=excelFile.saveToByteArray();
    var file:FileReference=new FileReference();
    file.save(mbytes,"测试文件.xls"); 
}
			
function generateSheet(i:int,j:int,o:Object):Sheet{
    if(!sheet){    
        sheet = new Sheet();    
        sheet.resize(10,10);    
    }    
    sheet.setCell(i, j, String(o));    
    return sheet;    
}    


FileReference的save方法在Flash10才支持,
在Flex工程上右键,属性,Flex Conpiler中把Require Flash Player version:填为10.0.0;在Flex Build Path中加入playerglobal.swc
,路径为…\sdks\3.2.0\frameworks\libs\player\10\playerglobal.swc

2.通过调JSP或Servlet导出。
AS代码:

Java代码 复制代码 收藏代码
  1. public static function ToExcel(dg:AdvancedDataGrid,name:String)   
  2. {   
  3.     //调用JSP   
  4.     var url:String="http://localhost:8080/XXX/Export/ExcelExport.jsp";   
  5.     var variables:URLVariables = new URLVariables();    
  6.     variables.htmltable = convertDGToHTMLTable(dg);   
  7.     var u:URLRequest = new URLRequest(url);   
  8.     u.data = variables;   
  9.     u.method = URLRequestMethod.POST;   
  10.     navigateToURL(u,"_self");    
  11. }   
  12.   
  13. private static function convertDGToHTMLTable(dg:AdvancedDataGrid):String {   
  14.     //Set default values   
  15.     var font:String = dg.getStyle('fontFamily');   
  16.     var size:String = dg.getStyle('fontSize');   
  17.     var str:String = '';   
  18.     var colors:String = '';   
  19.     var style:String = 'style="font-family:'+font+';font-size:'+size+'pt;"';                   
  20.     var hcolor:Array;   
  21.           
  22.     //Retrieve the headercolor   
  23.     if(dg.getStyle("headerColor") != undefined) {   
  24.         hcolor = [dg.getStyle("headerColor")];   
  25.     } else {   
  26.         hcolor = dg.getStyle("headerColors");   
  27.     }                   
  28.           
  29.     str+= '<head><meta http-equiv="Content-Type" content="text/htm; charset=utf-8"></head><table width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'">';   
  30.     for(var i:int = 0;i<dg.columns.length;i++) {   
  31.         colors = dg.getStyle("themeColor");               
  32.         if(dg.columns[i].headerText != undefined) {   
  33.             str+="<th "+style+">"+dg.columns[i].headerText+"</th>";                     
  34.         } else {   
  35.             str+= "<th "+style+">"+dg.columns[i].dataField+"</th>";   
  36.         }   
  37.     }   
  38.     str += "</tr></thead><tbody>";   
  39.     colors = dg.getStyle("alternatingRowColors");   
  40.     for(var j:int =0;j<dg.dataProvider.length;j++)    
  41.     {                       
  42.         str+="<tr width=\""+Math.ceil(dg.width)+"\">";   
  43.                   
  44.         for(var k:int=0; k < dg.columns.length; k++) {   
  45.             if(dg.dataProvider.getItemAt(j) != undefined && dg.dataProvider.getItemAt(j) != null) {                 
  46.                 if(dg.columns[k].labelFunction != undefined) {   
  47.                     str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.columns[k].labelFunction(dg.dataProvider.getItemAt(j),dg.columns[k].dataField)+"</td>";   
  48.                 }    
  49.                 else {   
  50.                     str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.dataProvider.getItemAt(j)[dg.columns[k].dataField]+"</td>";   
  51.                 }   
  52.             }   
  53.         }   
  54.         str += "</tr>";   
  55.     }   
  56.     str+="</tbody></table>";   
  57.     return str;   
  58. }  
public static function ToExcel(dg:AdvancedDataGrid,name:String)
{
    //调用JSP
    var url:String="http://localhost:8080/XXX/Export/ExcelExport.jsp";
    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"); 
}

private static function convertDGToHTMLTable(dg:AdvancedDataGrid):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");
    }                
	   
    str+= '<head><meta http-equiv="Content-Type" content="text/htm; charset=utf-8"></head><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");
    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;
}



ExcelExport.jsp放在后台XXX工程的WebRoot下的Export文件夹中。
ExcelExport.jsp:

Java代码 复制代码 收藏代码
  1. <%@ page language="java"%>   
  2. <%@ page contentType="application/msexcel;charset=UTF-8"  
  3.     pageEncoding="UTF-8"%>   
  4. <%   
  5. request.setCharacterEncoding("UTF-8");   
  6. //String instr=request.getParameter("filename");   
  7. response.setHeader("Content-disposition","attachment; filename=excel.xls");   
  8. response.setCharacterEncoding("UTF-8");   
  9. String str = request.getParameter("htmltable");   
  10. out.print(str);   
  11. %>  
分享到:
评论
7 楼 shuiyunbing 2015-01-14  
直接在前台导出方式:
excel中的单元格样式怎么处理,比如某行字体加粗,背景样色标记为红色。
6 楼 shanyejunjie 2013-08-22  
shanyejunjie 写道
存在日期字段labelfunction时,到这不走了,如何解决?
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>"; 


解决了,改成这样
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])+"</td>";
5 楼 shanyejunjie 2013-08-22  
存在日期字段labelfunction时,到这不走了,如何解决?
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>"; 
4 楼 dimg_ren 2013-07-10  
导出很长的文本时,被截断到75个汉字了,不知如何解决?
debug在sheet里都还是正常的,但是存成文件打开就截断了。
3 楼 henchong 2013-04-23  
用office excel 2007 打开是空白的,没有数据

解决方法是将
out.print(str);
换成
java.io.OutputStream os = response.getOutputStream();
os.write(str.getBytes("GBK"));
os.flush();
os.close();
而且把编码格式需要换成GBK(可能不需要,没测试)
单击打开的时候
“您尝试打开的文件“导出文件.xls”格式与扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开?”
这个问题还没解决
2 楼 henchong 2013-04-23  
用office excel 2007 打开是空白的,没有数据

解决方法是将
out.print(str);
换成
java.io.OutputStream os = response.getOutputStream();
os.write(str.getBytes("GBK"));
os.flush();
os.close();
而且把编码格式需要换成GBK(可能不需要,没测试)
单击打开的时候
“您尝试打开的文件“导出文件.xls”格式与扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开?”
这个问题还没解决
1 楼 henchong 2013-04-23  
用office 2007打开
在单击打开的时候会提示

“您尝试打开的文件“导出文件.xls”格式与扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开?”

选择是,但里面的数据什么都看不了,全是空白的。

相关推荐

    flex导出Excel

    使用as3xls-1.0.1.SWC包做的Flex界面DateGrid数据导出Excel表格。

    FLEX导出EXCEL支持合并隐藏单元格

    标题与描述:“FLEX导出EXCEL支持合并隐藏单元格” 该标题与描述明确指出了一个关键的功能点:在Flex框架下开发的应用程序能够导出数据到Excel,并且这一过程支持对单元格进行合并以及隐藏特定单元格的能力。这对于...

    flex导出复杂excel

    AdvancedDataGrid导出复杂表头excel

    flex导出excel

    标题中的“flex导出excel”指的是使用Adobe Flex技术来生成并导出Excel文件。Flex是一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA)。它允许开发者使用MXML和ActionScript编写用户界面,然后...

    flex 导出excel工具

    flex 导出excel工具包 用法如下: import com.as3xls.xls.ExcelFile; import com.as3xls.xls.Sheet; import mx.collections.ArrayCollection; import mx.controls.DataGrid; import mx.controls.dataGridClasses....

    Flex 导出Excel FlextoExcel

    Flex利用JSP导出Excel Flex利用JSP导出Excel

    Flex导出Excel之as3xls(包括datagrid全选功能)

    标题中的“Flex导出Excel之as3xls”指的是在Adobe Flex应用中,使用as3xls库来实现将数据导出为Microsoft Excel文件的功能。as3xls是一个开源的ActionScript 3库,它允许Flex开发者在客户端创建和操作Excel文档,而...

    flex导出excel的代码

    &lt;![CDATA[ import mx.controls.CheckBox; import mx.controls.Alert;... 导出" click="onCreate()"/&gt; (data as Object)} " /&gt; &lt;/mx:DataGridColumn&gt; &lt;/mx:WindowedApplication&gt;

    flex导出excel表格

    flex导出成excel部分代码

    Flex导出excel文件例子

    在Flex中导出Excel文件,通常分为以下几个步骤: 1. **集成as3xls库**:首先,你需要将as3xls库添加到你的Flex项目中。这可以通过将as3xls的SWC文件引入到你的类路径中完成。在Flex Builder或IntelliJ IDEA等IDE中...

    flex前台直接导出excel

    "flex前台直接导出excel"这个话题,指的是在使用Adobe Flex这一前端框架时,如何直接在客户端生成并导出Excel文件,而不需要通过服务器端如JSP或Java进行处理。这种方式可以避免因为字符编码问题导致的乱码,同时也...

    flex导出 excel

    Flex前端+Java后台,要将Flex界面中AdvancedDataGrid的数据导出成Excel文件。有2种方法:

    flex air 导出 excel

    要实现Flex Air导出Excel的功能,通常需要借助第三方库或者服务。一种常见的方法是使用Apache POI库,这是一个Java库,可以用来创建、修改Microsoft Office文件,包括Excel。虽然Flex本身是基于ActionScript,但可以...

    flex 导出excel

    导出Excel的过程通常涉及以下几个步骤: 1. 数据准备:收集adgDataGrid中的数据,包括列名和对应的数据行。对于多层标题头,你需要获取每一层标题的信息,并且组织成Excel能识别的格式。 2. 创建Excel工作簿对象:...

    flex 导出Excel(当前应用小结、示例、jar包)

    1. 数据导出至Excel.doc(包括当前导出方法小结,自己的示例,参考的网站) 2. poi-3.7-20101029.jar:当前最新的稳定的操作Excel的开发包 3. AirExcel.rar,as3xls.rar:air下Excel开发包 4. csvlib-1.4.1.rar:生成...

    flex导出excel具体实现

    虽然上述代码描述了一个基本的Flex导出Excel文件的实现过程,但实际应用中可能会遇到各种问题,比如数据格式化、文件兼容性、性能优化等。开发者在使用时需要根据实际情况调整和完善代码。此外,Flex作为Adobe的技术...

    flex air 导出 excel 支持中文

    在Flex Air应用中导出Excel并支持中文是一项常见的需求,特别是在数据可视化和报表生成的场景下。Flex Air是Adobe提供的一款基于Flash Player的桌面应用程序开发框架,它允许开发者创建具有丰富用户界面的桌面应用...

    flex中dataGrid导出数据到excel中

    flex中dataGrid导出数据到excel中,不存在乱码问题

Global site tag (gtag.js) - Google Analytics