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++; } } }
完了,谢谢!