Flex使用as3xls导出Excel文件

  使用as3xls这个工具(as3xlsUTF8.swc),可以在flex端导出数据为excel文件,这个例子就是导出一个DataGrid的内容到Excel文件。

private static var file:FileReference = new FileReference();;
        
private static var fields:Array = []; 

 

public static function downloadDataGridToExcel(dataGird:DataGrid,fileName:String):void
        {
            fields = [];
            
            var excelFile:ExcelFile = new ExcelFile();
            
            //创建sheet  
            var sheet:Sheet = new Sheet(); 
            var dataProviderCollection:ArrayCollection = dataGird.dataProvider as ArrayCollection; 
            var rowCount:int = dataProviderCollection.length; 
            sheet.resize(rowCount + 1,dataGird.columnCount); 
            
            //创建表头
            var columns:Array = dataGird.columns;
            var i:int = 0; 
            for each (var field:DataGridColumn in columns){ 
                fields.push(field.dataField.toString());/*  .toString() */
                sheet.setCell(0,i,field.headerText); 
                i++; 
            } 
            
            //插入数据
            for(var r:int=0; r < rowCount; r++) 
            { 
                var record:Object = dataProviderCollection.getItemAt(r); 
                /*insert record starting from row no 2 else 
                headers will be overwritten*/ 
                insertRecordInSheet(r+1,sheet,record,dataGird.columnCount); 
            } 
            
            excelFile.sheets.addItem(sheet);
            
            //导出文件
            var mbytes:ByteArray = excelFile.saveToByteArray();  
            var file:FileReference = new FileReference();  
            
            if(!fileName || StringUtil.trim(fileName) == "")
            {
                fileName = "导出的表格excel文件";
            }
            
            file.save(mbytes,fileName + ".xls");   
        }

 表头建好了,插入数据的方法:

private static function insertRecordInSheet(row:int,shet:Sheet,recod:Object,colCount:int):void 
        { 
            for(var c:int=0; c < colCount; c++) 
            { 
                var i:int = 0; 
                for each(var field:String in fields){ 
                    for each (var value:String in recod){ 
                        if (recod[field]==null)
                            recod[field]="";
                        if (recod[field].toString() == value) 
                            shet.setCell(row,i,value); 
                    } 
                    i++; 
                } 
            } 
        }

 完了,谢谢!

posted @ 2012-12-07 15:20  小小有  阅读(726)  评论(0)    收藏  举报