Flex 前台excel导出

来源:互联网 发布:网络切换器 编辑:程序博客网 时间:2024/05/19 19:33

一、excel.as中的Action Script 处理

view plaincopy to clipboardprint?
import mx.controls.dataGridClasses.DataGridColumn;  
import mx.rpc.events.AbstractEvent;  
import mx.collections.ArrayCollection;  
import mx.controls.DataGrid;  
import mx.formatters.DateFormatter;  
private function exportDataToClipboard(dg:DataGrid , dataSet:ArrayCollection):void   
{   
    var str:String = "";  
    var dgColumns:Array = dg.columns;  
    var tmp:String = "";  
      
    for(var i:Number=0; i<dgColumns.length;i++)  
    {  
        if(dgColumns[i].visible == true)  
        {  
            if(dgColumns[i].headerText != null)  
            {  
                str+= " " + dgColumns[i].headerText + "/t";               
            }   
            else   
            {   
                str+= " " + dgColumns[i].dataField + "/t"; ;  
            }  
        }                 
    }  
      
    str += "/n";  
      
    //Now Loop thru the array collection  
    for (var j:int=0; j<dataSet.length; j++)  
    {  
        for (var k:int=0;k<dgColumns.length; k++)  
        {  
            if(dgColumns[k].visible == true){  
                if(dgColumns[k].headerText == "Date")  
                    tmp = getDateFormatterForExcel().format(dataSet[j][dgColumns[k].dataField]) + "/t";  
                else 
                    tmp = dataSet[j][dgColumns[k].dataField] + "/t";  
                if(tmp!=null && tmp.length > 0)  
                {  
                    str+= tmp;  
                }  
            }  
              
        }  
        str += "/n";  
    }  
    trace(str);  
    System.setClipboard(str);  
}  
private function copyAndOpen(dg:DataGrid,dataSet:ArrayCollection):void 
{  
    exportDataToClipboard(dg,dataSet);  
    ExternalInterface.call("openExcel");  
}  
private function getDateFormatterForExcel():DateFormatter{  
    var dateFormatter:DateFormatter =  new mx.formatters.DateFormatter();  
    dateFormatter.formatString="YYYYMMDD";  
      
    return dateFormatter;  
}  
                                 
import mx.controls.dataGridClasses.DataGridColumn;
import mx.rpc.events.AbstractEvent;
import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
import mx.formatters.DateFormatter;
private function exportDataToClipboard(dg:DataGrid , dataSet:ArrayCollection):void
{
 var str:String = "";
 var dgColumns:Array = dg.columns;
 var tmp:String = "";
 
 for(var i:Number=0; i<dgColumns.length;i++)
 {
  if(dgColumns[i].visible == true)
  {
   if(dgColumns[i].headerText != null)
   {
    str+= " " + dgColumns[i].headerText + "/t";    
   }
   else
   {
    str+= " " + dgColumns[i].dataField + "/t"; ;
   }
  }    
 }
 
 str += "/n";
 
 //Now Loop thru the array collection
 for (var j:int=0; j<dataSet.length; j++)
 {
  for (var k:int=0;k<dgColumns.length; k++)
  {
   if(dgColumns[k].visible == true){
    if(dgColumns[k].headerText == "Date")
     tmp = getDateFormatterForExcel().format(dataSet[j][dgColumns[k].dataField]) + "/t";
    else
     tmp = dataSet[j][dgColumns[k].dataField] + "/t";
    if(tmp!=null && tmp.length > 0)
    {
     str+= tmp;
    }
   }
   
  }
  str += "/n";
 }
 trace(str);
 System.setClipboard(str);
}
private function copyAndOpen(dg:DataGrid,dataSet:ArrayCollection):void
{
    exportDataToClipboard(dg,dataSet);
    ExternalInterface.call("openExcel");
}
private function getDateFormatterForExcel():DateFormatter{
 var dateFormatter:DateFormatter =  new mx.formatters.DateFormatter();
 dateFormatter.formatString="YYYYMMDD";
 
 return dateFormatter;
}
        

二、调用Action Script的mxml

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?> 
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="ascript.*"  width="100%" height="100%"   
title="Export To Excel" showCloseButton="true" close="removePopUp()" borderAlpha="1" borderThicknessRight="2" borderThicknessLeft="2"   
borderThicknessBottom="5" resizeEffect="on" includeInLayout="true" creationComplete="initApp();"> 
    <!--REMOTE OBJECTS --> 
    <mx:RemoteObject id="pnlViewHandler" destination="pnlViewHandler"  result="resultHandler(event)"  showBusyCursor="true" channelSet="{HostUtil.getChannelSet()}"> 
                  
    </mx:RemoteObject> 
      
    <mx:Script> 
        <!--[CDATA[  
            include "../ascript/excel.as";  
              
            [Bindable]   
                public var dataSet:ArrayCollection;   
              
            private function initApp():void{  
                          
            var call:Object = null;  
                                          
            call = pnlViewHandler.searchDataForDataGrid(param1,param2,param3);    
            call.marker = "searchDataForDataGrid";  
                          
            }  
              
            private function resultHandler(event:ResultEvent):void{  
              
                var call:Object = event.token;  
                  
                if(call.marker == "searchDataForDataGrid"){  
                    dataSet = event.result as ArrayCollection;  
                }         
            }     
              
            private function removePopUp():void{  
                PopUpManager.removePopUp(this);  
            }   
              
        ]]--> 
    </mx:Script>    
      
    <mx:DataGrid name="dgClient" dataProvider="{dataSet}" id="dgClient" width="100%" height="100%" sortableColumns="true"   
        wordWrap="false" resizableColumns="true" enabled="true" horizontalScrollPolicy="auto" verticalScrollPolicy="auto"   
        lockedColumnCount="3" headerStyleName="headerStyle" allowDragSelection="false" buttonMode="false" moveEffect="on"   
        focusInEffect="on" headerColors="#00376F" horizontalGridLineColor="#004080" fontWeight="normal" fontStyle="normal"   
        fontSize="11" paddingRight="2" paddingLeft="8" textAlign="right">   
        <local:columns>   
            <mx:DataGridColumn headerText="Number" id="Number" dataField="Number" width="100" />   
            <mx:DataGridColumn headerText="Name" id="Name" dataField="Name" width="100" />   
            <mx:DataGridColumn headerText="Account" id="Acct" dataField="Acct" width="100" editable="false" />   
        </local:columns>   
    </mx:DataGrid>   
      
    <mx:LinkButton label="Export To Excel" click="copyAndOpen(dgClient,dataSet)" icon="@Embed('../images/excel.gif')" />   
</mx:TitleWindow> 
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="ascript.*"  width="100%" height="100%"
title="Export To Excel" showCloseButton="true" close="removePopUp()" borderAlpha="1" borderThicknessRight="2" borderThicknessLeft="2"
borderThicknessBottom="5" resizeEffect="on" includeInLayout="true" creationComplete="initApp();">
 <!--REMOTE OBJECTS -->
 <mx:RemoteObject id="pnlViewHandler" destination="pnlViewHandler"  result="resultHandler(event)"  showBusyCursor="true" channelSet="{HostUtil.getChannelSet()}">
    
 </mx:RemoteObject>
 
 <mx:Script>
  <!--[CDATA[
   include "../ascript/excel.as";
   
   [Bindable]
    public var dataSet:ArrayCollection;
   
   private function initApp():void{
      
   var call:Object = null;
          
   call = pnlViewHandler.searchDataForDataGrid(param1,param2,param3); 
   call.marker = "searchDataForDataGrid";
      
   }
   
   private function resultHandler(event:ResultEvent):void{
   
    var call:Object = event.token;
    
    if(call.marker == "searchDataForDataGrid"){
     dataSet = event.result as ArrayCollection;
    }  
   } 
   
   private function removePopUp():void{
    PopUpManager.removePopUp(this);
   }
   
  ]]-->
 </mx:Script> 
 
 <mx:DataGrid name="dgClient" dataProvider="{dataSet}" id="dgClient" width="100%" height="100%" sortableColumns="true"
  wordWrap="false" resizableColumns="true" enabled="true" horizontalScrollPolicy="auto" verticalScrollPolicy="auto"
  lockedColumnCount="3" headerStyleName="headerStyle" allowDragSelection="false" buttonMode="false" moveEffect="on"
  focusInEffect="on" headerColors="#00376F" horizontalGridLineColor="#004080" fontWeight="normal" fontStyle="normal"
  fontSize="11" paddingRight="2" paddingLeft="8" textAlign="right">
  <local:columns>
   <mx:DataGridColumn headerText="Number" id="Number" dataField="Number" width="100" />
   <mx:DataGridColumn headerText="Name" id="Name" dataField="Name" width="100" />
   <mx:DataGridColumn headerText="Account" id="Acct" dataField="Acct" width="100" editable="false" />
  </local:columns>
 </mx:DataGrid>
 
 <mx:LinkButton label="Export To Excel" click="copyAndOpen(dgClient,dataSet)" icon="@Embed('../images/excel.gif')" />
</mx:TitleWindow>

三、第二步中RemoteObject调用的HostUtil.as

view plaincopy to clipboardprint?
package ascript{  
    public class HostUtil{  
        import mx.core.Application;  
        import mx.messaging.channels.SecureAMFChannel;  
        import mx.messaging.Channel;  
        import mx.messaging.channels.AMFChannel;  
        import mx.messaging.ChannelSet;  
        private static const REQUEST_SCHEME:String = "http";  
        private static const SERVER_NAME:String = "127.0.0.1";  
        private static const SERVER_PORT:String = "8700";  
        private static const CONTEXT_ROOT:String = "/pnlWebApp";  
        public static function getHostURL():String{  
            if(Application.application.parameters.hostURL != null){  
                return Application.application.parameters.hostURL+Application.application.parameters.hostContext;  
            }else{  
                return REQUEST_SCHEME+"://"+SERVER_NAME+":"+SERVER_PORT+CONTEXT_ROOT;  
            }  
        }  
        public static function getHostRootURL():String{  
            if(Application.application.parameters.hostURL != null){  
                return Application.application.parameters.hostURL;  
            }else{  
                return REQUEST_SCHEME+"://"+SERVER_NAME+":"+SERVER_PORT;  
            }  
        }  
        public static function getChannelSet():ChannelSet{  
            var cs:ChannelSet = new ChannelSet();  
            //HTTP Request  
            var amfChannel:Channel = new AMFChannel("my-amf", getHostURL()+"/messagebroker/amf");  
            cs.addChannel(amfChannel);    
               
            //HTTPS Request  
            //var secureAmfChannel:Channel = new SecureAMFChannel("my-secure-amf", getHostURL()+"/messagebroker/amfsecure");  
            //cs.addChannel(secureAmfChannel);  
              
            return cs;  
        }  
    }  

package ascript{
 public class HostUtil{
  import mx.core.Application;
  import mx.messaging.channels.SecureAMFChannel;
  import mx.messaging.Channel;
  import mx.messaging.channels.AMFChannel;
  import mx.messaging.ChannelSet;
  private static const REQUEST_SCHEME:String = "http";
  private static const SERVER_NAME:String = "127.0.0.1";
  private static const SERVER_PORT:String = "8700";
  private static const CONTEXT_ROOT:String = "/pnlWebApp";
  public static function getHostURL():String{
   if(Application.application.parameters.hostURL != null){
    return Application.application.parameters.hostURL+Application.application.parameters.hostContext;
   }else{
    return REQUEST_SCHEME+"://"+SERVER_NAME+":"+SERVER_PORT+CONTEXT_ROOT;
   }
  }
  public static function getHostRootURL():String{
   if(Application.application.parameters.hostURL != null){
    return Application.application.parameters.hostURL;
   }else{
    return REQUEST_SCHEME+"://"+SERVER_NAME+":"+SERVER_PORT;
   }
  }
  public static function getChannelSet():ChannelSet{
   var cs:ChannelSet = new ChannelSet();
   //HTTP Request
   var amfChannel:Channel = new AMFChannel("my-amf", getHostURL()+"/messagebroker/amf");
   cs.addChannel(amfChannel); 
   
   //HTTPS Request
   //var secureAmfChannel:Channel = new SecureAMFChannel("my-secure-amf", getHostURL()+"/messagebroker/amfsecure");
   //cs.addChannel(secureAmfChannel);
   
   return cs;
  }
 }
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lujinan858/archive/2009/07/15/4346383.aspx