原文出自:http://arcadiocarballares.com/?p=683 Export data to Excel from spark DataGrid
导出Excel工具类--AS文件:
package es.util { import com.as3xls.xls.ExcelFile; import com.as3xls.xls.Sheet; import flash.errors.IllegalOperationError; import flash.net.FileReference; import flash.utils.ByteArray; import mx.controls.dataGridClasses.DataGridListData; import spark.components.DataGrid; import spark.components.gridClasses.GridColumn; public class FlexToExcel { public function FlexToExcel() { throw new IllegalOperationError ("Class "ExcelExporterUtil" is static. You can't instance this"); } static public function exportDataGrid (dt:DataGrid, filename:String="excel.xls", listData:DataGridListData=null):void { var head:Array = new Array(); for each (var item:GridColumn in dt.columns.toArray()) { head.push(item.headerText); } var data:Array = new Array(); for each (var obj:Object in dt.dataProvider) { var arr:Array=new Array(); for each (var hd:GridColumn in dt.columns.toArray()) { arr.push(hd.itemToLabel(obj)); } data.push(arr); } export(head,data,filename); } static private function export(head:Array, data:Array,filename:String):void { // Create sheet var cols:int = head.length; var rows:int = data.length+1; var sheet:Sheet = new Sheet(); sheet.resize(rows,cols); // Header var row:int=0; var col:int=0; for each (var item:String in head) { sheet.setCell(row,col,item); col++; } // Data row=1; col=0; for each (var dataRow:Array in data) { for each (var dataCol:String in dataRow) { sheet.setCell(row,col,dataCol); col++; } col=0; row++; } // Add sheet var xls:ExcelFile = new ExcelFile(); xls.sheets.addItem(sheet); var bytes:ByteArray = xls.saveToByteArray(); // Generate file var fr:FileReference = new FileReference(); fr.save(bytes, filename); } } }
mxml代码:
<?xml version="1.0"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:layout> <s:VerticalLayout/> </s:layout> <fx:Script> <![CDATA[ import es.util.FlexToExcel; import mx.collections.ArrayCollection; import spark.components.gridClasses.GridColumn; [Bindable] private var items:ArrayCollection = new ArrayCollection([ {nombre:"Andrés", apellido:"Sánchez", date:new Date()}, {nombre:"Mónica", apellido:"Sánchez", date:new Date()}, {nombre:"Agustina", apellido:"Sánchez", date:new Date()}, {nombre:"Pablo", apellido:"Sánchez", date:new Date()}, {nombre:"Magalí", apellido:"Sánchez", date:new Date()} ]); private function exportToExcel():void { FlexToExcel.exportDataGrid(dt); } private function getCompleteLabel (item:Object, column:GridColumn):String { var result:String = ""; if (item != null) { result = item.nombre + " " + item.apellido; } return result; } ]]> </fx:Script> <fx:Declarations> <s:DateTimeFormatter id="myFormatter" dateTimePattern="dd/MM/yyyy" errorText="test error!"/> </fx:Declarations> <s:DataGrid id="dt" dataProvider="{items}" width="100%" height="100%"> <s:columns> <s:ArrayList> <s:GridColumn dataField="nombre" headerText="Nombre"/> <s:GridColumn dataField="apellido" headerText="Apellido"/> <s:GridColumn headerText="Completo" labelFunction="getCompleteLabel"/> <s:GridColumn headerText="Fecha" dataField="date" itemRenderer="es.renderer.DateRenderer" formatter="{myFormatter}"/> </s:ArrayList> </s:columns> </s:DataGrid> <s:Button label="Export" click="exportToExcel();" /> </s:Application>