flex datagrid 数据保存到excel以及从excel读取数据

    最近在做这个,要下载一个as3xls.swc文件,这个是开源的。或者直接下载源代码。在例子中有源代码,swc也在下载文件中,可以下载并查看。例子中是别人写的,用AIR写的,主要是读取Excel文件内容,后台打印出来的。(我也是研究别人的东西呵呵)

 

    下面介绍下datagrid数据保存到excel文件中。

     具体上代码大家看吧。(由于公司有限制有些网站功能无法使用代码格式大家凑合着看吧)

 

     <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
    <mx:Script>
        <![CDATA[
            import com.as3xls.xls.Cell;
            import mx.collections.ArrayCollection;
           
            import com.as3xls.xls.Sheet;
            import com.as3xls.xls.ExcelFile;
            import mx.controls.Alert;
            private var fileReference:FileReference;
            private var xls:Class;
            private var sheet:Sheet;
           
            [Bindable]
            private var dg:Array;
           
            [Bindable]
            private var fields:Array = new Array();
            private function init():void
            {
                dg=new Array();
                for(var i:int=0;i<4;i++)
                {
                    //ItemName/ItemCost/ItemQty/ItemPrice
                    var tempArray:Array = new Array();
                    tempArray.ItemName="ItemName^^"+i;
                    tempArray.ItemCost="ItemCost^^"+i;
                    tempArray.ItemQty="ItemQty^^"+i;
                    tempArray.ItemPrice="ItemPrice^^"+i;
                    dg.push(tempArray);
                }
               
            }
           
            private function exportToExcel():void
            {
                sheet = new Sheet();
                var dataProviderCollection:ArrayCollection =myDg.dataProvider as ArrayCollection;
                var rowCount:int =  dataProviderCollection.length;
                sheet.resize(rowCount+1,myDg.columnCount);
                var columns:Array = myDg.columns;
               
                var i:int = 0;
                for each (var field:DataGridColumn in columns)
                {
                    fields.push(field.dataField.toString());
                    sheet.setCell(0,i,field.dataField.toString());
                    i++;
                }
               
                for(var r:int=0;r<rowCount;r++)
                {
                   
                    var record:Object =dataProviderCollection.getItemAt(r);
                    insertRecordInSheet(r+1,sheet,record);
                }
                var xls:ExcelFile = new ExcelFile();
                xls.sheets.addItem(sheet);
               
                var bytes: ByteArray = xls.saveToByteArray();
                var fr:FileReference = new FileReference();
                fr.save(bytes,"SampleExport.xls");
            }
            private function insertRecordInSheet(row:int,sheet:Sheet,record:Object):void
            {
                var colCount:int = myDg.columnCount;
                for(var c:int; c < colCount; c++)
                {
                    var i:int = 0;
                    for each(var field:String in fields)
                    {
                        for each (var value:String in record)
                        {
                            if (record[field].toString() == value)
                                sheet.setCell(row,i,value);
                        }
                        i++;
                    }
                }
            }
        ]]>
    </mx:Script>
    <mx:DataGrid id="myDg" x="78" y="55" width="533" height="157"  dataProvider="{dg}">
        <mx:columns>
            <mx:DataGridColumn headerText="ItemName" dataField="ItemName"/>
            <mx:DataGridColumn headerText="ItemCost" dataField="ItemCost"/>
            <mx:DataGridColumn headerText="ItemQty" dataField="ItemQty"/>
            <mx:DataGridColumn headerText="ItemPrice" dataField="ItemPrice"/>
        </mx:columns>
    </mx:DataGrid>
    <mx:Button id="myBtn" x="619" y="113" label="exporttoexcel" click="exportToExcel();"/>  
</mx:Application>

 

FileReference是flash10.0.0版本所有的。所以你要使用此类,必须设置你的开发环境。具体右键-->properties-->Flex compiler里面设置版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值